Direct3D 9 (磁片區紋理資源)
磁片區紋理是圖元的三維集合, (紋素) ,可用來繪製二維琪本類型,例如三角形或線條。 需要三個元素紋理座標,才能讓基本類型的每個頂點使用磁片區進行紋理。 繪製基本類型時,每個包含的圖元都會根據類似于二維紋理大小寫的規則,填滿磁片區內某些圖元的色彩值。 磁片區不會直接轉譯,因為沒有可使用它們繪製的三維琪本類型。
您可以針對特殊效果使用磁片區紋理,例如修補的霧、暴增等等。
磁片區會組織成配量,而且可以視為寬度 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();
}
相關主題