Triangle Strips

A triangle strip is a series of connected triangles. Because the triangles are connected, the application does not need to repeatedly specify all three vertices for each triangle. For example, only seven vertices are required to define the following triangle strip.

The system uses vertices v1, v2, and v3 to draw the first triangle, v2, v4, and v3 to draw the second triangle, v3, v4, and v5 to draw the third, v4, v6, and v5 to draw the fourth, and so on. Notice that the vertices of the second and fourth triangles are out of order; this is required to make sure that all of the triangles are drawn in a clockwise orientation.

A triangle strip is created by first filling an array of vertices, as in the following code fragment.

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);

The triangle strip can then be drawn to the screen with the IDirect3DDevice2::DrawPrimitive function. The following code fragment illustrates the use of IDirect3DDevice2::DrawPrimitive for drawing the triangle strip in the preceding example. Remember that all calls to IDirect3DDevice2::DrawPrimitive must occur between IDirect3DDevice2::BeginScene and IDirect3DDevice2::EndScene.

HRESULT hResult;

hResult =

lpDirectDrawDevice2->DrawPrimitive(

D3DPT_TRIANGLESTRIP, // The primitive type.

D3DVT_VERTEX, // The vertex type.

lpVerts, // Pointer to the vertex list.

TOTAL_VERTS, // Number of vertices

D3DDP_WAIT); // For debugging only.

The resulting triangle strip is shown in the following illustration.