A triangle fan is similar to a triangle strip, except that all of the triangles share one vertex, as shown in the following illustration.
The system uses vertices v1, v2, and v3 to draw the first triangle, v3, v4, and v1 to draw the second triangle, v1, v4, and v5 to draw the third triangle, and so on.
A triangle fan 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(0,0,0),D3DVECTOR(0,0,-1),0,0);
lpVerts[1] = D3DVERTEX(D3DVECTOR(-5,-5,0),D3DVECTOR(0,0,-1),0,0);
lpVerts[2] = D3DVERTEX(D3DVECTOR(-3,7,0),D3DVECTOR(0,0,-1),0,0);
lpVerts[3] = D3DVERTEX(D3DVECTOR(0,10,0),D3DVECTOR(0,0,-1),0,0);
lpVerts[4] = D3DVERTEX(D3DVECTOR(3,7,0),D3DVECTOR(0,0,-1),0,0);
lpVerts[5] = D3DVERTEX(D3DVECTOR(5,5,0),D3DVECTOR(0,0,-1),0,0);
The triangle fan 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 fan 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_TRIANGLEFAN, // 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 fan is shown in the following illustration.