ボリューム テクスチャ リソース
ボリューム テクスチャ リソース
ボリューム テクスチャとは、三角形やラインなどの 2D プリミティブの描画に使えるピクセル (テクセル) の 3D の集まりのことである。立体でテクスチャ処理されるプリミティブの各頂点には、3 要素のテクスチャ座標が必要である。プリミティブを描画する場合、各プリミティブに含まれるピクセルには、2D テクスチャの場合と同じような規則に従って、ボリューム内のピクセルの色値が設定される。ボリュームを使って描画できる 3D プリミティブがないため、ボリュームを直接レンダリングすることはできない。
ボリューム テクスチャは、まだらなフォグや爆発などの特殊効果に使える。
ボリュームはスライスにまとめられ、幅 × 高さの 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();
}