DirectX Graphics 프로그래밍 가이드 고정 기능 파이프라인 텍스처 텍스처 좌표 텍스처 좌표 처리 텍스처 좌표의 자동 생성 [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
시스템은, 변환 후의 카메라 공간에서의 정점의 위치나 법선을 텍스처 좌표로서 사용할 수 있다. 또, 큐브 환경 맵을 실행하기 위한 3 요소 벡터를 계산하는 일도 가능하다. 정점으로써 명시적으로 지정하는 텍스처 좌표와 같이, 자동 생성된 텍스처 좌표를, 텍스처 좌표변화용의 입력으로서 사용할 수 있다.
텍스처 좌표의 자동 생성에 의해, 정점 포맷에서의 명시적인 텍스처 좌표의 필요성을 배제할 수 있으므로, 지오메트리 데이터에 필요한 대역폭을 큰폭으로 삭감할 수 있다. 많은 경우, 시스템으로 생성된 텍스처 좌표는, 특수 효과를 낳는 변환과 함께 사용할 수 있다. 물론, 이 기능은 특수한 용도에 사용되는 것이어, 명시적인 텍스처 좌표를 사용하는 케이스도 많이 있다.
C++ 의 경우, (D3DTEXTURESTAGESTATETYPE 열거형으로부터의) D3DTSS_TEXCOORDINDEX 텍스처 스테이지 스테이트를 사용해, 텍스처 좌표의 생성 방법을 제어한다.
보통, 이 스테이트는, 정점 포맷으로 encode 된 특정의 텍스처 좌표 세트를 사용하도록(듯이) 시스템에 알린다. 이 스테이트에 할당하는 값안에, D3DTSS_TCI_CAMERASPACENORMAL, D3DTSS_TCI_CAMERASPACEPOSITION, 또는 D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR 플래그를 포함했을 경우, 시스템으로 실행되는 처리는 크게 달라 진다. 이러한 플래그의 어느쪽이든에서도 존재하고 있을 때, 텍스처 스테이지는 정점 포맷의 텍스처 좌표를 무시해, 시스템이 생성하는 좌표를 우선한다. 각 플래그의 의미는, 다음과 같다.
정점 법선을 입력 텍스처 좌표로서 사용한다. 정점 법선은 카메라 공간에 변환 된다.
정점 위치를 입력 텍스처 좌표로서 사용한다. 정점 위치가 카메라 공간에 변환 된다.
반사 벡터를 입력 텍스처 좌표로서 사용한다. 반사 벡터는, 입력 정점 위치와 법선 벡터로부터 계산한다.
이러한 플래그는 서로 배타적이다. 이러한 플래그의 어느쪽이든을 사용하는 경우는, 텍스처 랩핑 모드를 결정하기 위해서(때문에) 시스템으로 사용하는 인덱스값을 지정할 수 있다.
다음 코드는, C++ 에서의 이러한 플래그의 사용 방법을 나타내고 있다.
/* * For this example, the d3dDevice variable is a valid * pointer to an IDirect3DDevice9 interface. * * Use the vertex position (camera-space) as the input * texture coordinates for this texture stage, and the * wrap mode set in the D3DRENDERSTATE_WRAP1 render state. */ d3dDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION | 1 );
자동 생성된 텍스처 좌표는, 텍스처 좌표변화의 입력값으로 매우 편리하고, 또 큐브 환경 맵의 3 요소 벡터를 계산할 필요가 없다고 하는 점에서도 편리하다.
구면의 맵핑에서는, 모델링시에 미리 계산된, 크롬의 구체에 의해 반사된 환경 전체를 포함한 텍스처 맵을 사용한다. Microsoft® Direct3D® 에는 렌더링 스테이트 D3DTSS_TCI_CAMERASPACENORMAL 를 사용하는 텍스처 좌표 생성 기능이 있어, 카메라 공간에서의 정점의 법선을 사용해, 텍스처 변환에 의해, 텍스처 좌표를 생성한다. 더 자세한 정보는, 「Sphere Map 샘플」을 참조할것.