Platform SDK: DirectX

三角形ストリップ

三角形ストリップとは、一連の結合された三角形である。三角形は結合されているため、各三角形に対して 3 つの頂点すべてをアプリケーションで繰り返し指定する必要はない。たとえば、次の三角形ストリップを定義する場合、7 つの頂点のみ必要である。

システムでは、頂点の v1、v2、v3 を使用して最初の三角形を、v2、v4、v3 を使用して 2 番目の三角形を、v3、v4、v5 を使用して 3 番目の三角形を、v4、v6、v5 を使用して 4 番目の三角形を、という手順で描画していく。2 番目と 4 番目の三角形の頂点が順序通りでないことに注意する。これは、すべての三角形が時計回りの方向に描画されることを保証するために必要である。

3D シーンのほとんどのオブジェクトは三角形ストリップで構成されている。これは、三角形ストリップを使用して複雑なオブジェクトを指定すると、メモリを効率的に利用して処理時間を短縮できるからである。三角形ストリップは、頂点の配列に値を設定して作成する。

[C++]

次の C++ コードでは、三角形ストリップとして使用するために頂点を配列に格納する。

const DWORD TOTAL_VERTS=6;
D3DVERTEX lpVerts[TOTAL_VERTS];
 
lpVerts[0] = D3DVERTEX(D3DVECTOR(-5,-5,0),D3DVECTOR(0,0,-1),0,0);
lpVerts[1] = D3DVERTEX(D3DVECTOR(0,5,0),D3DVECTOR(0,0,-1),0,0);
lpVerts[2] = D3DVERTEX(D3DVECTOR(5,-5,0),D3DVECTOR(0,0,-1),0,0);
lpVerts[3] = D3DVERTEX(D3DVECTOR(10,5,0),D3DVECTOR(0,0,-1),0,0);
lpVerts[4] = D3DVERTEX(D3DVECTOR(15,-5,0),D3DVECTOR(0,0,-1),0,0);
lpVerts[5] = D3DVERTEX(D3DVECTOR(20,5,0),D3DVECTOR(0,0,-1),0,0);

この後、IDirect3DDevice7::DrawPrimitive メソッドを使用して三角形ストリップをレンダリングできる。次のコードは、IDirect3DDevice7::DrawPrimitive を使用して、上の例の三角形ストリップを描画する方法を示す。IDirect3DDevice7::DrawPrimitive の呼び出しは、IDirect3DDevice7::BeginSceneIDirect3DDevice7::EndScene の間で行う必要がある。

HRESULT hResult;
// このコードでは、lpDirect3DDevice7 は IDirect3DDevice7 インターフェイスへの
// 有効なポインタであるとする。
hResult = 
    lpDirect3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,
                                      D3DFVF_VERTEX,
                                      lpVerts,
                                      TOTAL_VERTS,
                                      D3DDP_WAIT); 
[Visual Basic]

Visual Basic で記述されたアプリケーションでは、次のようなコードで三角形ストリップを設定できる。

' このコードでは、dx は DirectX7 オブジェクトへの
' 有効な参照であるとする。
On Local Error Resume Next
Const TOTAL_VERTS As Integer = 6
Dim Verts(TOTAL_VERTS) As D3DVERTEX
 
Verts(0) = dx.CreateD3DVertex(-5, -5, 0, 0, 0, -1, 0, 0)
Verts(1) = dx.CreateD3DVertex(0, 5, 0, 0, 0, -1, 0, 0)
Verts(2) = dx.CreateD3DVertex(5, -5, 0, 0, 0, -1, 0, 0)
Verts(3) = dx.CreateD3DVertex(10, 5, 0, 0, 0, -1, 0, 0)
Verts(4) = dx.CreateD3DVertex(15, -5, 0, 0, 0, -1, 0, 0)
Verts(5) = dx.CreateD3DVertex(20, 5, 0, 0, 0, -1, 0, 0)

この後、Direct3DDevice7.DrawPrimitive メソッドを使用して三角形ストリップをレンダリングできる。次のコードは、Direct3DDevice7.DrawPrimitive を使用して、上の例の三角形ストリップを描画する方法を示す。Direct3DDevice7.DrawPrimitive の呼び出しは、Direct3DDevice7.BeginSceneDirect3DDevice7.EndScene の間で行う必要がある。

' このコードでは、d3ddev が Direct3DDevice7 オブジェクトへの
' 有効な参照であるとする。
Call d3ddev.DrawPrimitive(D3DPT_TRIANGLESTRIP, _ 
D3DFVF_VERTEX, _ 
Verts(0), _ 
TOTAL_VERTS, _ 
D3DDP_WAIT);
 
If Err.Number <> DD_OK Then
' エラー処理コード
End If

次の図は、結果として描画される三角形ストリップを示す。