비타Cpp

Direct3D의 초기화 - 가위 직사각형 설정 본문

DirectX12/튜토리얼

Direct3D의 초기화 - 가위 직사각형 설정

멍C 2021. 10. 9. 15:13

가위 직사각형(Scissor Rectangle)은 특정 픽셀들을 선별(Culling)하는 용도로 쓰인다. 후면 버퍼를 기준으로 가위 직사각형을 정의, 설정하면, 렌더링 시 가위 직사각형의 바깥에 있는 픽셀들은 후면 버퍼에 래스터화 되지 않는다. 이러한 픽셀 선별은 일종의 최적화 기법이다. 예를 들어 다른 모든 것을 가리는 직사각형 UI 요소가 화면의 특정 영역에 있다면, 그 부분에 있는 3차원 세계의 픽셀들은 처리할 필요가 없다(어차피 그 UI 요소가 가릴 것이므로).

가위 직사각형은 D3D12_RECT라는 구조체로 서술한다. 사실 이 구조체는 가조체 RECT에 typedef를 이용해서 다른 이름을 붙인 것이다.

typedef struct _RECT {
  LONG left;
  LONG top;
  LONG right;
  LONG bottom;
} RECT, *PRECT;

typedef RECT D3D12_RECT;

가위 직사각형을 Direct3D에 설정할 때에는 ID3D12CommandList::RSSetScissorRects라는 메서드를 사용한다.

다음은 후면 버퍼의 왼쪽 위 사분면을 덮는 가위 사각형을 설정하는 예이다.

mScissorRect = { 0, 0, mClientWidth/2, mClientHeight/2 };
mCommandList->RSSetScissorRects(1, &mScissorRect);

RSSetViewport 메서드와 비슷하게, 이 메서드의 첫 매개변수는 설정할 가위 직사각형들의 개수이고, 둘째 매개변수는 직사각형 구조체들의 배열을 가리키는 포인터이다.


※ 하나의 렌더 대상에 여러 개의 가위 직사각형을 지정할 수는 없다. 다중 가위 직사각형은 장면을 동시에 여러 개의 렌더 대상에 렌더링 하는 고급 기법들에 쓰인다.

 

※ CommandList를 재설정(Reset)하면 가위 직사각형들도 재설정 해야한다.


 

Comments