DirectX SDK |
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 v2, v3, and v1 to draw the first triangle, v3, v4, and v1 to draw the second triangle, v4, v5, and v1 to draw the third triangle, and so on. (When flat shading is enabled, the system shades the triangle with the color from its first vertex.)
Your C++ application can create a triangle fan by filling an array of vertices, as shown 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);
It can then render the triangle fan using the IDirect3DDevice7::DrawPrimitive method. The following code fragment illustrates the use of IDirect3DDevice7::DrawPrimitive for drawing the triangle fan in the preceding example. Remember that all calls to IDirect3DDevice7::DrawPrimitive must occur between IDirect3DDevice7::BeginScene and IDirect3DDevice7::EndScene.
HRESULT hResult; // This code fragment assumes that lpDirect3DDevice is a valid // pointer to an IDirect3DDevice7 interface. hResult = lpDirect3DDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, D3DFVF_VERTEX, lpVerts, TOTAL_VERTS, D3DDP_WAIT);
A Visual Basic application can create a triangle fan by setting up an array of vertices as shown in the following code fragment:
' This code fragment assumes that dx is a valid reference ' to a DirectX7 object. On Local Error Resume Next Const TOTAL_VERTS As Integer = 6 Dim Verts(TOTAL_VERTS) As D3DVERTEX Verts(0) = dx.CreateD3DVertex(0, 0, 0, 0, 0, -1, 0, 0) Verts(1) = dx.CreateD3DVertex(-5, -5, 0, 0, 0, -1, 0, 0) Verts(2) = dx.CreateD3DVertex(-3, 7, 0, 0, 0, -1, 0, 0) Verts(3) = dx.CreateD3DVertex(0, 10, 0, 0, 0, -1, 0, 0) Verts(4) = dx.CreateD3DVertex(3, 7, 0, 0, 0, -1, 0, 0) Verts(5) = dx.CreateD3DVertex(5, 5, 0, 0, 0, -1, 0, 0)
It can then render the triangle fan using the Direct3DDevice7.DrawPrimitive method. The following code fragment illustrates the use of Direct3DDevice7.DrawPrimitive for drawing the triangle fan in the preceding example. Remember that all calls to Direct3DDevice7.DrawPrimitive must occur between Direct3DDevice7.BeginScene and Direct3DDevice7.EndScene.
' This code fragment assumes that d3ddev is a valid ' reference to an Direct3DDevice7 object. Call d3ddev.DrawPrimitive(D3DPT_TRIANGLEFAN, _ D3DFVF_VERTEX, _ Verts(0), _ TOTAL_VERTS, _ D3DDP_WAIT) If Err.Number <> DD_OK Then ' Code to handle error goes here. End If
This illustration depicts the resulting triangle fan.