建立頂點緩衝區 (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。 裁剪旗標佔用額外的記憶體,讓支援裁剪的頂點緩衝區稍微大於頂點緩衝區,而無法包含裁剪旗標。 由於這些資源會在建立頂點緩衝區時配置,因此您必須事先要求具有裁剪功能的頂點緩衝區。
第三個參數 FVF是 D3DFVF 的組合,描述頂點緩衝區的頂點格式。 如果您為此參數指定 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;
相關主題