Microsoft DirectX 8.0 (C++)

インデックス バッファからのレンダリング

インデックス バッファのインデックス データをレンダリングするには、いくつかのステップが必要である。まず、IDirect3DDevice8::SetStreamSource メソッドを呼び出して、ストリーム ソースを設定する必要がある。

d3dDevice->SetStreamSource( 0, VB, sizeof(CUSTOMVERTEX) );

SetStreamSource の第 1 パラメータは、Microsoft® Direct3D® にデバイス データ ストリームのソースを知らせる。第 2 パラメータは、データ ストリームにバインドする頂点バッファである。第 3 パラメータは、成分のサイズをバイト単位で指定する。上のサンプル コードでは、CUSTOMVERTEX のサイズが成分のサイズに使用されている。

次のステップでは、IDirect3DDevice8::SetIndices メソッドを呼び出してインデックス データのソースを設定する。

d3dDevice->SetIndices( IB, 0 );

SetIndices が受け取る最初のパラメータは、設定するインデックス バッファのアドレスである。第 2 パラメータは、頂点ストリームの開始点である。

ストリームおよびインデックス ソースを設定した後、IDirect3DDevice8::DrawIndexedPrimitive メソッドを使用して、インデックス バッファからインデックスを使用する頂点をレンダリングする。

d3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST, 0,
                                   dwVertices, 0, dwIndices / 3);

DrawPrimitive が受け取る第 2 パラメータは、この呼び出しの間に使用される頂点群に対する最小の頂点インデックスである。第 3 パラメータは、この呼び出しで使用されるインデックスの数である (BaseVertexIndex + MinIndex から始まる)。第 4 パラメータは、インデックス配列におけるインデックスの読み出し開始位置である。DrawPrimitive が受け取る最後のパラメータは、レンダリングするプリミティブの個数である。このパラメータは、プリミティブ カウントおよびプリミティブ タイプの関数である。上のコードでは、三角形を使用している。したがって、レンダリングするプリミティブの個数は、3 で割り切れるインデックス数となる。