共用方式為


磁碟區紋理資源 (Direct3D 9)

磁碟區紋理是像素(紋素)的三維集合,可用來繪製二維基本類型,例如三角形或線條。 基本類型的每個頂點都需要三個元素紋理座標,且該頂點要以磁碟區進行紋理。 繪製基本類型時,每個包含的圖元會根據類似二維紋理大小寫的規則,填入磁碟區內某個圖元的色彩值。 磁碟區不會直接轉譯,因為沒有可使用它們繪製的三維基本類型。

您可以使用磁碟區紋理進行特殊效果,例如修補霧、爆炸等等。

磁碟區會組織成配量,可視為寬度 x 高度 2D 表面堆疊,以建立寬度 x 高度 x 深度卷。 每個配量都是單一數據列。 磁碟區可以有後續層級,其中每個層級的維度會截斷為上一個層級的一半。 下圖顯示具有多個層級的磁碟區紋理外觀。

具有 8x2x4、4x1x2 和 2x1x1 Cube 表示法的磁碟區紋理圖表

建立磁碟區紋理

下列程式代碼範例顯示使用磁碟區紋理所需的步驟。

首先,指定具有每個頂點三個紋理座標的自定義頂點類型,如此程式碼範例所示。

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 紋理