DirectX Graphics 프로그래밍 가이드 고정 기능 파이프라인 텍스처 볼륨 텍스처 리소스 [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
볼륨 텍스처란, 삼각형이나 라인등의 2D 기본도형의 드로잉(Drawing)에 사용할 수 있는 픽셀 (텍셀)의 3D 의 모임이다. 입체로 텍스처 처리되는 기본도형의 각 정점에는, 3 요소의 텍스처 좌표가 필요하다. 기본도형를 드로잉(Drawing) 하는 경우, 각 원시적으로 포함되는 픽셀에는, 2D 텍스처의 경우와 같은 규칙에 따라, 볼륨내의 픽셀의 색값이 설정된다. 볼륨을 사용해 드로잉(Drawing) 할 수 있는 3D 기본도형가 없기 때문에, 볼륨을 직접 렌더링 할 수 없다.
볼륨 텍스처는, 아직들인 포그(안개:fog)나 폭발등의 특수 효과에 사용할 수 있다.
볼륨은 슬라이스에 정리해폭 × 높이의 2D 표면이 스택 되어,폭 × 높이 × 깊이의 볼륨을 구성 하면 생각할 수가 있다. 각 슬라이스는, 단일행이다. 입체는 밉레벨을 가질 수가 있다. 각 레벨의 크기는, 직전 레벨의 반의 크기에 컷 된다. 다음 그림은 복수 레벨을 가지는 볼륨 텍스처를 나타내고 있다.
다음 코드는, 볼륨 텍스처를 사용하기 위해서(때문에) 필요한 순서를 나타내고 있다.
우선, 각 정점에 대해서 3 개의 텍스처 좌표를 가지는 커스텀 정점 타입을 지정한다. 다음 코드에 예를 나타낸다.
struct VOLUMEVERTEX { FLOAT x, y, z; DWORD color; FLOAT tu, tv, tw; }; #define D3DFVF_VOLUMEVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE| D3DFVF_TEX1|D3DFVF_TEXCOORDSIZE3(0))
다음에, 정점에 데이터를 설정한다.
VOLUMEVERTEX g_vVertices[4] = { { 1.0f, 1.0f, 0.0f, 0xffffffff, 1.0f, 1.0f, 0.0f }, {-1. 0f, 1.0f, 0.0f, 0xffffffff, 0.0f, 1.0f, 0.0f }, { 1.0f,-1. 0f, 0.0f, 0xffffffff, 1.0f, 0.0f, 0.0f }, {-1. 0f,-1. 0f, 0.0f, 0xffffffff, 0.0f, 0.0f, 0.0f } };
다음에, 정점 버퍼를 생성 해, 정점의 데이터를 설정한다.
다음의 순서는,IDirect3DDevice9::CreateVolumeTexture 메서드를 사용해, 볼륨 텍스처를 생성 하는 것이다. 다음 코드에 예를 나타낸다.
LPDIRECT3DVOLUMETEXTURE9 pVolumeTexture; d3dDevice->CreateVolumeTexture( 8, 4, 4, 1, 0, D3DFMT_R8G8B8, D3DPOOL_MANAGED, &pVolumeTexture );
기본도형를 렌더링 하기 전에, 현재 텍스처를 전의 순서로 생성 한 볼륨 텍스처로 설정한다. 다음 코드는, 삼각형 스트립의 렌더링 프로세스 전체를 나타내고 있다.
if( SUCCEEDED( d3dDevice->BeginScene() ) ) { // Draw the quad, with the volume texture. d3dDevice->SetTexture( 0, pVolumeTexture ); d3dDevice->SetFVF( D3DFVF_VOLUMEVERTEX ); d3dDevice->SetStreamSource( 0, pVB, sizeof(VOLUMEVERTEX) ); d3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2); // End the scene. d3dDevice->EndScene(); }