-
[DirectX] 뷰포트 클리핑 볼륨의 설정정리필요2 2008. 6. 29. 22:54
뷰포트 클리핑 볼륨의 설정
렌더링 장치에 대해서 뷰포트 파라미터를 설정하기 위한 조건은, 뷰포트의 클리핑 볼륨을 설정하는 것 뿐이다. 이 때문에는, 클리핑 볼륨과 렌더링 타겟 표면용의 클리핑값을 초기화 및 설정한다. 뷰포트는, 일반적으로는, 렌더링 타겟 표면의 전영역에 렌더링 하도록(듯이) 설정되지만, 반드시 그렇게 할 필요는 없다.
C++ 로 이것을 실현하려면 ,D3DVIEWPORT9 구조체의 멤버를 다음과 같이 설정한다.
D3DVIEWPORT9 viewData = { 0, 0, width, height, 0.0f, 1.0f };
D3DVIEWPORT9 구조체에 값을 설정한 후,IDirect3DDevice9::SetViewport 메서드를 호출해 장치에 뷰포트 파라미터를 적용한다. 다음 코드는, 이 호출을 나타내고 있다.
HRESULT hr; hr = pd3dDevice->SetViewport(&viewData); if(FAILED(hr)) return hr;
이 호출이 성공하면 뷰포트 파라미터가 설정되어 다음번 렌더링 메서드를 호출했을 때에 이 뷰포트 파라미터가 유효하게 된다. 뷰포트 파라미터는,D3DVIEWPORT9 구조체의 값을 갱신해, 다시 IDirect3DDevice9::SetViewport 을 호출하는 것만으로 변경할 수 있다.
주 D3DVIEWPORT9 구조체의 MinZ 및 MaxZ 멤버는, 장면(scene)가 렌더링 되는 깊이 범위를 나타내, 클리핑에는 사용되지 않는다. 대부분의 애플리케이션에서는, 이 멤버를 0.0 으로 1.0 으로 설정해, 깊이 버퍼내의 깊이값의 전범위에 렌더링 하고 있다. 경우에 따라서는, 다른 깊이 범위를 사용해 특수 효과를 얻을 수도 있다. 예를 들어, 게임의 헤드 업 디스플레이를 렌더링 하는 경우, 양쪽 모두의 값을 0.0 으로 설정해 foreground의 장면(scene)내의 개체를 강제적으로 렌더링 하거나 양쪽 모두의 값을 1.0 으로 설정해 항상 백그라운드에 존재할 필요가 있는 개체를 렌더링 할 수 있다.