Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

codingfarm

Direct3D의 초기화 - 뷰포트 설정 본문

computer graphics/DirectX11

Direct3D의 초기화 - 뷰포트 설정

scarecrow1992 2020. 11. 29. 12:32

보통은 3차원 장면을 후면 버퍼 전체에 그린다. 그러나 원한다면 후면버퍼의 일부를 차지하는 직사각형 영역에만 그리는것도 가능하다.

 

장면을 그려 넣고자 하는 후면 버퍼의 부분지가각형 영역을 뷰포트(viewport)라고 부른다. 다음은 이 뷰포트를 서술하는 데 쓰이는 구조체이다.

typedef struct D3D11_VIEWPORT {
    FLOAT TopLeftX;
    FLOAT TopLeftY;
    FLOAT Width;
    FLOAT Height;
    FLOAT MinDepth;
    FLOAT MaxDepth;
} D3D11_VIEWPORT;

뷰포트를 수정함으로써 3차원 장면을 후면 버퍼의 한 부분직사각형에 그린 모습이다. 그리고 후면 버퍼를 응용 프로그램창의 클라이언트 영역에 제시한다.

처음 4개의 필드는 뷰포트를 표시할 직사각형의 위치와 크기이다.

MinDepth 멤버는 최소 깊이 버퍼값이고 MaxDepth는 최대 깊이 버퍼값이다. Direct3D가 사용하는 깊이 버퍼값의 범위는 0에서 1까지이므로, 특수 효과를 원하는게 아니라면 이 값들도 그 기준을 따라야 한다.

D3D11_VIEWPORT 구조체를 다 채운 다음에는 ID3D11DeviceContext::RSSetViewports 메서드를 이용해서 Direct3D에게 뷰포트를 알려준다. 다음은 장면을 후면 버퍼 전체에 그리도록 하는 뷰포트를 생성, 설정하는 예이다.

D3D11_VIEWPORT vp;
vp.TopLeftX = 0.0f;
vp.TopLeftY = 0.0f;
vp.Width = static_cast<float>(mClientWidth);
vp.Height = static_cast<float>(mClientHeight);
vp.MinDepth = 0.0f;
vp.MaxDepth = 1.0;

md3dImmediateContext->RSSetViewports(1, &vp);

첫 매개변수는 묶을 뷰포트 갯수이고(고극 기법들에서는 여러개의 뷰포트도 사용 가능하다) 둘째 매개변수는 뷰포트 배열을 가리키는 포인터이다.

다수의 뷰포트를 활용하면 서로 다른 화면이 표시되는 2인용 게임, UI컨트롤 등의 기능을 구현할 수 있다.

 

 

 

Comments