Direct3D can only draw triangles (well, it can also draw lines and points, but apart from the point). Therefore, if you want to draw any complex shape than a triangle, you need to draw a bunch of touching triangles equal to this shape.
In your case, this is a concave polygonal triangulation problem. Given a bunch of vertices, you can save them as they are, you just need to calculate the "index buffer" (in the simplest case, three indices per triangle, which say which vertices use the triangle). Then draw this by putting in vertex buffers / index or using DrawUserPrimitives.
Some algorithms for triangulating simple (convex or concave, but without self-intersections or holes) polygons are on the VTerrain website .
I have used Ratcliff code in the past; very simple and works well. VTerrain has a dead link to it; The code can be found here . This is C ++, but porting to C # should be simple.
Oh, and don't use triangle fans. They are very limited, inefficient, and will leave soon (for example, Direct3D 10 no longer supports them). Just use lists of triangles.
source share