그래픽스

    컨텍스트(Context)

    https://www.reddit.com/r/opengl/comments/lb3ptw/what_is_context_in_opengl/ OpenGL이나 DirectX와 같은 그래픽스 라이브러리를 학습하다보면 컨텍스트(context)라는 단어를 종종 볼 수 있다. 각 그래픽스 라이브러리마다 구현된 방법도 다르고 사용 방법도 다르겠지만, 일반적으로 컨텍스트는 렌더링 파이프라인 전반에 걸쳐 사용되는 특정한 상태를 기억하고 관리하는 객체라고 생각하면 된다. 이러한 관점에서 OpenGL은 하나의 큰 상태 머신(state machine)이라고 생각하면 된다. 이 상태 머신은 하나의 스레드마다 하나의 컨텍스트를 가질 수 있으며, 컨텍스트를 이용해 상태 머신 내부에서 사용할 수 있는 모든 상태를 관리할 수 있게 된다. ..

    이미지 스트라이드(Image Stride)

    https://learn.microsoft.com/en-us/windows/win32/medfound/image-stride 이미지(비디오 포함)가 메모리에 저장될 때, 메모리 버퍼에는 각 행(row)마다 여분의 패딩(padding) 바이트가 포함될 수도 있다. 패딩 바이트는 이미지가 메모리에 어떻게 저장되는지에 영향을 주지만, 이미지가 화면에 표시되는 형태에는 영향을 주지 않는다. 이미지는 테이블 형태(2차원 배열)로 저장된 픽셀이라고 생각할 수 있다. 이때, 스트라이트(stride)는 한 행의 시작지점에서 다음 행의 시작 지점까지의 바이트의 크기가 된다. 스트라이드는 피치(pitch)라고 부르기도 한다. 만약 패딩 바이트가 있다면 스트라이드는 이미지의 너비보다 클 것이고, 패딩이 없다면 스트라이드는 ..

    쉐이더 리소스 뷰(ID3D11ShaderResourceView) 사용하기

    쉐이더는 GPU에서 실행되는 프로그램이다. DirectX와 같은 그래픽스 라이브러리에서 제공하는 렌더링 파이프라인은 GPU와 쉐이더를 이용하여 렌더링을 하기 위한 절차를 의미한다. CPU에서 실행되는 프로그램과 GPU에서 실행되는 프로그램은 서로 다른 메모리를 사용하기 때문에 필요한 데이터가 있다면 이를 CPU나 GPU로 넘겨주어야 한다. DirectX에서는 이렇게 전달되는 데이터를 리소스(resource)라고 부른다. DirectX에서 사용되는 일반적인 리소스의 종류는 크게 텍스처(texture)와 버퍼(buffer, 버텍스 버퍼, 인덱스 버퍼, 컨스턴트 버퍼 등)로 나눌 수 있다. C++에서 실행되는 DirectX 라이브러리의 함수들은 CPU에서 실행되는 코드다. 따라서 GPU에 존재하는 텍스처나 버..

    1인칭 시점(First Person View) 구현하기

    0. 개요컴퓨터 그래픽스에서 시점은 3차원 가상 공간을 바라보는 관점이라고 볼 수 있다. 3차원 공간에 있는 어떤 물체를 2차원 스크린에 표현하기 위해서 일반적으로 model, view, projection 행렬을 곱해주는데, 그 이유는 다음과 같다.물체는 자신의 원점(0.0, 0.0, 0.0)을 기준으로 버텍스 정보를 가지고 있다.(모델 좌표계)이 버텍스 정보에 model 행렬을 곱해주면 3차원 가상 공간의 월드 좌표로 변환이 된다.(모델 좌표계 -> 월드 좌표계 변환)월드 좌표에 view 행렬을 곱해주면 뷰 좌표로 변환이 된다.(월드 좌표계 -> 뷰 좌표계)뷰 좌표에 projection 행렬을 곱해주면 스크린 좌표로 변환이 된다.(뷰 좌표계 -> 스크린 좌표계)이 중에서 월드 좌표에 view 행렬을 ..