三角测量 3D 算法

Posted

技术标签:

【中文标题】三角测量 3D 算法【英文标题】:Triangulation 3D algorithm 【发布时间】:2014-07-30 12:22:53 【问题描述】:

我在 3D 空间中有数千个多边形,其中包含超过 3 个顶点。我想将每个多边形划分为一组三角形。我一直在寻找整个互联网,但我找不到任何可以做到这一点的 3D 算法。我发现了许多在 2D 上工作的算法,例如 ear clippingDelaunay triangulation。但我找不到任何 3D 算法。

我在这个网站上看到了许多相同的问题,这些问题的答案都是“使用 Delaunay 三角测量算法”。但我已经看到这个算法适用于 2D: http://www.geom.uiuc.edu/~samuelp/del_project.html

实现一种算法,以找到二维给定点集的约束 Delaunay 三角剖分。

我可以使用什么 3D 三角测量算法? 我正在使用带有 C++ 的 OpenGL。

【问题讨论】:

Delaunay 用于点集三角剖分,您需要为耳剪设计的多边形三角剖分。您可以通过将多边形投影到任何不退化的平面上来将耳朵剪裁应用于 3D。 受约束的 Delaunay 三角剖分适用于多边形。 只是为了确保您不会让这种方式变得过于复杂:多边形可以是凹的吗?只要它们是凸的,这当然是一个微不足道的问题。此外,还有一些方法可以直接使用 OpenGL 渲染任意多边形,使用模板缓冲区。根据您的用例,这可能是另一种选择。 Reto Koradi - 是的,模型可以是凹的。而且我需要将数据存储在变量中,而不是直接渲染它。在你的路上有可能吗?如果有,怎么做? 我假设每个多边形相对于由它的面法线和其中一个点定义的平面是平的?在这种情况下,为什么不在该平面上将其减少到 2d,而只使用您已经知道的常规三角测量方法之一? 【参考方案1】:

您可以使用 GLUTesselator:

http://www.glprogramming.com/red/chapter11.html

另请注意,3D 多边形将有许多面,这些面可以转换到轴对齐的 2D 平面上,进行三角剖分,然后将结果转换回由面定义的平面。

【讨论】:

【参考方案2】:

您可以使用 delaunay 三角剖分,但可以使用四面体。基本上使用 Bowyer Watson 和外接球:http://blog.mmacklin.com/tag/meshing/.

【讨论】:

以上是关于三角测量 3D 算法的主要内容,如果未能解决你的问题,请参考以下文章

基于三角网格排序的人体三围测量算法

Halcon—3D测量算法的那点数学公式和代码实现

Halcon—3D测量算法的那点数学公式和代码实现

Halcon—3D测量算法的那点数学公式和代码实现

如何对 sparxe 体素八叉树 (SVO) 进行三角测量

从顶点数组生成三角形网格的算法