是否有一种有效\简单的方法在 Direct3d 中绘制凹多边形

Not*_*vis 5 c# directx polygon concave

我正在尝试使用 c# 和 directx 绘制多边形

我得到的只是一个文件中点的有序列表,我需要在 3d 世界中绘制平面多边形。

我可以加载点并使用三角扇和 drawuserprimitive 绘制凸形。

当多边形非常凹(可能是)时,这显然会导致不正确的结果。

我无法想象我是唯一一个解决这个问题的人(虽然我是 gfx/directx 新手 - 我的背景是 gui\windows 应用程序开发)。

任何人都可以指出一个简单的资源\教程\算法可以帮助我吗?

NeA*_*RAZ 5

Direct3D 只能绘制三角形(当然,它也可以绘制直线和点,但这不是重点)。因此,如果您想绘制任何比三角形更复杂的形状,则必须绘制一堆等于该形状的相接三角形。

就您而言,这是一个凹多边形三角剖分问题。给定一堆顶点,您可以保持它们不变,您只需要计算“索引缓冲区”(在最简单的情况下,每个三角形的三个索引表示三角形使用哪些顶点)。然后通过放入顶点/索引缓冲区或使用 DrawUserPrimitives 来绘制它。

一些用于对简单(凸或凹,但没有自相交或孔)多边形进行三角测量的算法位于VTerrain 站点

我过去曾使用过 Ratcliff 的代码;非常简单并且效果很好。VTerrain 有一个死链接;代码可以在这里找到。它是 C++,但将其移植到 C# 应该很简单。

哦,不要使用三角扇。它们的用途非常有限、效率低下并且很快就会消失(例如 Direct3D 10 不再支持它们)。只需使用三角形列表即可。