볼륨 텍스처 리소스(Direct3D 9)

볼륨 텍스처는 삼각형 또는 선과 같은 2차원 기본 형식을 그리는 데 사용할 수 있는 픽셀(텍셀)의 3차원 컬렉션입니다. 볼륨으로 텍스처화할 기본형의 각 꼭짓점마다 3개 요소의 텍스처 좌표가 필요합니다. 기본 형식이 그려질 때 포함된 각 픽셀은 2차원 텍스처 케이스와 유사한 규칙에 따라 볼륨 내의 일부 픽셀의 색 값으로 채워집니다. 볼륨으로 그릴 수 있는 3차원 기본 형식이 없으므로 볼륨이 직접 렌더링되지 않습니다.

안개, 폭발 등의 특수 효과에 볼륨 텍스처를 사용할 수 있습니다.

볼륨은 조각으로 구성되며 너비 x 높이 x 깊이 볼륨을 만들기 위해 누적된 너비 x 높이 2D 표면으로 간주할 수 있습니다. 각 조각은 단일 행입니다. 볼륨에는 각 수준의 차원이 이전 수준의 절반 크기로 잘리는 후속 수준이 있을 수 있습니다. 다음 다이어그램은 여러 수준이 있는 볼륨 텍스처의 모양을 보여 주세요.

8x2x4, 4x1x2 및 2x1x1 큐브 표현이 있는 볼륨 텍스처 다이어그램

볼륨 텍스처 만들기

아래 코드 예제에서는 볼륨 텍스처를 사용하는 데 필요한 단계를 보여 줍니다.

먼저 이 코드 예제와 같이 각 꼭짓점마다 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();
}

Direct3D 텍스처