DrawIndexedPrimitiveについて †
プリミティブ(基本的な図形)を描画する為のコマンドにはDrawPrimitiveとDrawIndexedPrimitiveの二種類があります。(更にそれぞれのコマンドの派生としてDrawPrimitiveUpとDrawIndexedPrimitiveUpというのもありますが、ここでは省略します。)
DrawIndexedPrimitiveを呼び出す時は頂点データが入っている頂点バッファの他に、何番目の頂点を使ってプリミティブを描くかを指示する頂点インデックスバッファも指定する必要があります。しかし同じ頂点を共有する複数のプリミティブを描画する場合にはDrawIndexedPrimitiveを使った方がメモリ使用の効率が良くなります。
(下のコード例では頂点バッファに入る頂点データは1頂点あたり24バイトも消費するのに対し、頂点インデックスバッファには頂点番号を入れれば良いので1頂点あたり2バイト又は4バイトしか消費しない為。)
ただDrawIndexedPrimitiveの引数はヘルプを見てもわかりにくい所があるので、どの様な値を指定すれば良いのかを以下の例で示したいと思います。
実際のコード †
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
| |
struct d3dvtx_s {
D3DXVECTOR3 pnt; D3DCOLOR clr; D3DXVECTOR2 tx1; };
lpD3Ddev->SetIndecs(&VIdxSet); lpD3Ddev->SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1); lpD3Ddev->SetStreamSource(0, VtxSet, 0, sizeof(d3dvtx_s));
lpD3Ddev->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 1, 7, 3, 1);
|
ページ情報 |
- カテゴリ : DirectX
- 作成日 : 2006-07-09 (日) 22:38:46
- 作成者 : rakuppe?
- 最終編集日 : 2006-07-19 (水) 02:17:45
- 最終編集者 : rakuppe?
|