*DrawIndexedPrimitiveについて [#ddb3e7e3] プリミティブ(基本的な図形)を描画する為のコマンドにはDrawPrimitiveとDrawIndexedPrimitiveの二種類があります。(更にそれぞれのコマンドの派生としてDrawPrimitiveUpとDrawIndexedPrimitiveUpというのもありますが、ここでは省略します。) DrawIndexedPrimitiveは頂点バッファの他に頂点インデックスバッファも指定する必要がありますが、同じ頂点を共有する複数のプリミティブを描画する場合にメモリ使用の効率が良くなります。 **実際のコード [#sb36e1a1] #code(c){{ /*== 宣言部 ==*/ /* 頂点バッファの型 */ struct d3dvtx_s { D3DXVECTOR3 pnt; // 位置 D3DCOLOR clr; // 色 D3DXVECTOR2 tx1; // テクスチャ }; /*== 実際のコード ==*/ /* ここでは頂点バッファ(VtxSet)に VtxSet[0] = {0.0f, 0.0f, 0.0f, 0xFF00, 0.0f, 0.0f}; VtxSet[1] = {1.0f, 0.0f, 0.0f, 0xFF00, 0.0f, 0.0f}; VtxSet[2] = {2.0f, 0.0f, 0.0f, 0xFF00, 0.0f, 0.0f}; VtxSet[3] = {0.0f, 1.0f, 0.0f, 0xFF00, 0.0f, 0.0f}; VtxSet[4] = {1.0f, 1.0f, 0.0f, 0xFF00, 0.0f, 0.0f}; VtxSet[5] = {2.0f, 1.0f, 0.0f, 0xFF00, 0.0f, 0.0f}; VtxSet[6] = {0.0f, 2.0f, 0.0f, 0xFF00, 0.0f, 0.0f}; VtxSet[7] = {1.0f, 2.0f, 0.0f, 0xFF00, 0.0f, 0.0f}; VtxSet[8] = {2.0f, 2.0f, 0.0f, 0xFF00, 0.0f, 0.0f}; 頂点インデックスバッファ(VIdxSet)に VIdxSet = {0, 3, 1, 1, 3, 7}; とセットされている物とします。 ・頂点バッファの値はそれぞれ{X座標, Y座標, Z座標, 色, テクスチャのU座標, テクスチャのV座標}です。 ・頂点バッファや頂点インデックスバッファの作成、値のセットに関しては別項を設けて説明したいと思います。 */ /* Direct3Dデバイス(のポインタ)をlpD3Ddevとします */ lpD3Ddev->SetIndecs(&VIdxSet); // 頂点インデックスバッファの指定 lpD3Ddev->SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1); // 頂点フォーマットの指定 lpD3Ddev->SetStreamSource(0, VtxSet, 0, sizeof(d3dvtx_s)); // 頂点バッファの指定 /* 頂点インデックスバッファの3番目の項目から3項目を使い三角形を描画する */ lpD3Ddev->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, // 三角形リスト 0, // 頂点バッファのベースとなる位置。(…★) 1, // 頂点バッファの1番目の項目(上の★で示した位置を0番目とする)から使用する。 7, // 頂点バッファの1番〜7番の範囲を使用する。 3, // 頂点インデックスバッファの開始位置 1); // 幾つプリミティブを描画するか? }} //これより下は編集しないでください #pageinfo([[:Category/DirectX]],2006-07-09 (日) 22:38:46,rakuppe,2006-07-09 (日) 23:51:50,rakuppe) |