Microsoft DirectX 8.0 (C++) |
5 つのパラメータを受け取る IDirect3DDevice8::CreateVertexBuffer メソッドを呼び出して、頂点バッファ オブジェクトを作成する。第 1 パラメータは、頂点バッファの長さをバイト数で指定する。頂点フォーマットのサイズをバイト単位で判定するには、sizeof 演算子を使用する。次に、カスタム頂点フォーマットの例を示す。
struct CUSTOMVERTEX { FLOAT x, y, z; FLOAT rhw; DWORD color; FLOAT tu, tv; // テクスチャ座標。 }; // カスタム頂点構造体を記述するカスタム FVF。 #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1)
4 つの CUSTOMVERTEX 構造体を保持する頂点バッファを作成するには、Length パラメータに [4*sizeof(CUSTOMVERTEX)] を指定する。
第 2 パラメータは、使用コントロール セットである。特に、この値は、頂点バッファが表示領域外の頂点のクリッピング情報を (クリップ フラグ形式で) 保持することができるかどうかを指定する。クリップ フラグを格納できない頂点バッファを作成するには、Usage パラメータに D3DUSAGE_DONOTCLIP フラグを含める。D3DUSAGE_DONOTCLIP フラグは、頂点バッファがトランスフォーム済みの頂点を保持するように指示した場合、つまり、D3DFVF_XYZRHW フラグが FVF メンバに含まれる場合のみ適用される。未トランスフォームの頂点 (D3DFVF_XYZ フラグ) をバッファに含めるよう指示した場合、CreateVertexBuffer メソッドは D3DUSAGE_DONOTCLIP フラグを無視する。クリッピング フラグは追加メモリを占有するため、クリッピング可能な頂点バッファは、クリッピング フラグを含めない頂点バッファよりも若干大きくなる。リソースは頂点バッファが作成されるときに割り当てられるため、クリッピング可能な頂点バッファは先に要求しておかなければならない。
第 3 パラメータ FVF は、柔軟な頂点フォーマット フラグの組み合わせによって、頂点バッファの頂点フォーマットを記述する。このパラメータに 0 を指定した場合、頂点バッファは非 FVF 頂点バッファとなる。詳細については、「FVF 頂点バッファ」を参照すること。第 4 パラメータは、頂点バッファを格納するメモリ クラスを指定する。
CreateVertexBuffer が受け取る最後のパラメータは、呼び出しが成功したときに頂点バッファ オブジェクトの新しい IDirect3DVertexBuffer8 インターフェイスへのポインタが格納される変数のアドレスである。
注 クリップ フラグをサポートしないで作成された頂点バッファにクリップ フラグを生成することはできない。
次のコードは、C++ で頂点バッファを作成する方法を示している。
// この例では、変数 d3dDevice は、 // Direct3DDevice オブジェクトによって公開される IDirect3DDevice8 インターフェイスへのアドレスであり、 // g_pVB は、LPDIRECT3DVERTEXBUFFER8 型の変数である。 // カスタムの頂点タイプ。 struct CUSTOMVERTEX { FLOAT x, y, z; FLOAT rhw; DWORD color; FLOAT tu, tv; // テクスチャ座標。 }; #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1) // クリッピング可能な頂点バッファを作成する。3 つの CUSTOMVERTEX 構造体を保持するのに十分なメモリを // デフォルトのメモリ プールに割り当てる。 if( FAILED( d3dDevice->CreateVertexBuffer( 3*sizeof(CUSTOMVERTEX), 0 /* 使用 */, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB ) ) ) return E_FAIL;