共用方式為


建立頂點緩衝區 (Direct3D 9)

您可以呼叫接受五個參數的 IDirect3DDevice9::CreateVertexBuffer 方法來建立頂點緩衝區物件。 第一個參數會以位元組為單位指定頂點緩衝區長度。 使用 sizeof 運算子來判斷頂點格式的大小,以位元組為單位。 請考慮下列自訂頂點格式。

struct CUSTOMVERTEX {
        FLOAT x, y, z;
        FLOAT rhw;
        DWORD color;
        FLOAT tu, tv;   // Texture coordinates
};

// Custom flexible vertex format (FVF) describing the custom vertex structure
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1)

若要建立頂點緩衝區來保存四個 CUSTOMVERTEX 結構,請為 Length 參數指定 [4*sizeof (CUSTOMVERTEX) ]。

第二個參數是一組使用方式控制項。 此外,其值會決定頂點緩衝區是否能夠包含裁剪資訊,格式為裁剪旗標,適用于存在於檢視區域外的頂點。 若要建立不能包含剪輯旗標的頂點緩衝區,請包含 Usage 參數的D3DUSAGE_DONOTCLIP旗標。 只有在您也指出頂點緩衝區將包含已轉換的頂點時,才會套用D3DUSAGE_DONOTCLIP旗標 - FVF 參數中包含D3DFVF_XYZRHW旗標。 如果您指出緩衝區將包含未轉換的頂 (點, IDirect3DDevice9::CreateVertexBuffer 方法會忽略D3DUSAGE_DONOTCLIP旗標) D3DFVF_XYZ。 裁剪旗標佔用額外的記憶體,讓支援裁剪的頂點緩衝區稍微大於頂點緩衝區,而無法包含裁剪旗標。 由於這些資源會在建立頂點緩衝區時配置,因此您必須事先要求具有裁剪功能的頂點緩衝區。

第三個參數 FVFD3DFVF 的組合,描述頂點緩衝區的頂點格式。 如果您為此參數指定 0,則頂點緩衝區是非 FVF 頂點緩衝區。 如需詳細資訊,請參閱 FVF 頂點緩衝區 (Direct3D 9) 。 第四個參數描述要放置頂點緩衝區的記憶體類別。

如果呼叫成功, IDirect3DDevice9::CreateVertexBuffer 接受的最後一個參數就是將填入頂點緩衝區物件之新 IDirect3DVertexBuffer9 介面指標的變數位址。

您無法為建立的頂點緩衝區產生剪輯旗標,但不支援它們。

下列 C++ 程式碼範例示範在程式碼中建立頂點緩衝區可能的樣子。

   
// d3dDevice contains the address of an IDirect3DDevice9 interface
// g_pVB is a variable of type LPDIRECT3DVERTEXBUFFER9 

// The custom vertex type
struct CUSTOMVERTEX {
    FLOAT x, y, z;
    FLOAT rhw;
    DWORD color;
    FLOAT tu, tv;   // The texture coordinates
};

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1)

// Create a clipping-capable vertex buffer. Allocate enough memory 
// in the default memory pool to hold three CUSTOMVERTEX 
// structures

    if( FAILED( d3dDevice->CreateVertexBuffer( 3*sizeof(CUSTOMVERTEX),
            0 /*Usage*/, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )
        return E_FAIL;

頂點緩衝區