Direct3D 只能绘制三角形(当然,它也可以绘制直线和点,但这不是重点)。因此,如果您想绘制任何比三角形更复杂的形状,则必须绘制一堆等于该形状的相接三角形。
就您而言,这是一个凹多边形三角剖分问题。给定一堆顶点,您可以保持它们不变,您只需要计算“索引缓冲区”(在最简单的情况下,每个三角形的三个索引表示三角形使用哪些顶点)。然后通过放入顶点/索引缓冲区或使用 DrawUserPrimitives 来绘制它。
一些用于对简单(凸或凹,但没有自相交或孔)多边形进行三角测量的算法位于VTerrain 站点。
我过去曾使用过 Ratcliff 的代码;非常简单并且效果很好。VTerrain 有一个死链接;代码可以在这里找到。它是 C++,但将其移植到 C# 应该很简单。
哦,不要使用三角扇。它们的用途非常有限、效率低下并且很快就会消失(例如 Direct3D 10 不再支持它们)。只需使用三角形列表即可。