我正在使用 Unity,但解决方案应该是通用的。
我将从鼠标点击中获得用户输入,它定义了一个封闭的不规则多边形的顶点列表。
该顶点将定义平面 3D 网格的外边缘。
要在 Unity 中按程序生成网格,我必须指定所有顶点以及它们如何连接以形成三角形。
所以,对于凸多边形来说,这是微不足道的,我只是制作顶点为 1,2,3 然后 1,3,4 等的三角形,形成像孔雀尾部一样的东西。
但对于凹多边形来说,就不是那么简单了。
有没有找到内部三角形的有效算法?
最佳答案
您可以使用受约束的 Delaunay triangulation (这不是很容易实现!)。良好的库实现可在 Triangle 内获得和 CGAL ,提供高效O(n*log(n))
实现。
如果顶点集很小,ear-clipping算法也是一种可能性,尽管它不一定会给你一个 Delaunay 三角剖分(它通常会产生次优三角形)并在 O(n^2)
中运行.不过,实现自己很容易。
由于输入顶点存在于 3d 空间中的平面上,因此您可以通过投影到平面上,计算 2d 中的三角剖分,然后将相同的网格拓扑应用于 3d 顶点集来解决 2d 问题。
关于geometry - 给定一个不规则多边形的顶点列表,如何创建内部三角形来有效地构建平面 3D 网格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13369452/