磁碟區紋理是像素(紋素)的三維集合,可用來繪製二維基本類型,例如三角形或線條。 基本類型的每個頂點都需要三個元素紋理座標,且該頂點要以磁碟區進行紋理。 繪製基本類型時,每個包含的圖元會根據類似二維紋理大小寫的規則,填入磁碟區內某個圖元的色彩值。 磁碟區不會直接轉譯,因為沒有可使用它們繪製的三維基本類型。
您可以使用磁碟區紋理進行特殊效果,例如修補霧、爆炸等等。
磁碟區會組織成配量,可視為寬度 x 高度 2D 表面堆疊,以建立寬度 x 高度 x 深度卷。 每個配量都是單一數據列。 磁碟區可以有後續層級,其中每個層級的維度會截斷為上一個層級的一半。 下圖顯示具有多個層級的磁碟區紋理外觀。
建立磁碟區紋理
下列程式代碼範例顯示使用磁碟區紋理所需的步驟。
首先,指定具有每個頂點三個紋理座標的自定義頂點類型,如此程式碼範例所示。
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();
}
相關主題