【问题标题】:3D triangulation algorithm3D三角测量算法
【发布时间】:2011-03-09 08:01:47
【问题描述】:

有人知道 Maya 使用什么三角测量算法吗?缺乏这一点,最有可能尝试的算法是什么?我尝试了一些简单的方法(最短/最长的边缘,最小的最小角度,最小/最大的区域),但它们都错了。 Delaunay 是最合理的算法吗?

编辑:顺便说一句,关于如何在 3D 空间中为 2D 四边形实现 Delaunay 以生成两个三角形的伪代码非常受欢迎!

编辑 2:不幸的是,this 不是 3D 空间中的答案(仅适用于 2D)。

【问题讨论】:

  • 翻转(如您的链接中所示)仍然通常在 3d 网格上完成,但您可能需要额外的约束来避免翻转极不平面的四边形。
  • 是的,怪癖似乎使这些限制恰到好处。

标签: algorithm maya mesh triangulation


【解决方案1】:

我不喜欢猜测人们的意图,但如果您只是想摆脱 Maya 视口中显示的内容,您可以从 MItMeshPolygon::getTriangles 开始提取 Maya 的三角剖分。

(相应的法线和顶点颜色可以直接访问。UV 需要更多的努力——我不记得细节(我所有的 Maya 代码都在我的前雇主那里),但乍一看它可能看起来像你没有数据,其实都有,只是不方便。)

(进一步说明——如果您的艺术家足够努力,他们可以创建在调用getTriangles 时使 Maya 崩溃的多边形,即使它们渲染正常并且可以使用 UI 进行操作。过去每隔几个月就会发生这种情况,因此值得牢记,但可能不值得担心太多。)

如果您不想使用 API 或 Python,则在导出之前运行 polyTriangulate,然后在之后运行 undo(以取回原始多边形)可以让您检查三角网格。 (您可能希望或需要将场景保存到临时文件,然后重新加载它并使用 file 将其恢复为旧名称,如果您的导出过程执行的操作很难或无法撤消。)

这有点老套,但可以保证得到 Maya 使用的精确三角测量。这比编写自己的三角测量代码要容易得多,而且几乎可以肯定比尝试解决 Maya 内部所做的任何事情要容易得多......

【讨论】:

  • 不幸的是,我有 mel,但无法访问 C api(工具链几乎完成,我不会替换它)。天哪,我对 Maya 的内部结构越来越感到恼火,因为几个月前我走上了逆向工程白痴的道路。 :)
  • 我认为这就是你想要做的吗?如果您不能使用 Python 绑定到 C++ API,那么“polyTriangulate、export、undo”之类的东西可能会有所帮助。 (或者,将场景保存到临时文件,三角剖分,导出,重新加载,使用“文件”给它的旧名称,以防你的导出做一些随机的东西,与撤消队列混淆。)有点hacky,但比更容易编写自己的三角测量代码,我愿意打赌这比尝试解决 Maya 内部所做的任何事情要容易得多......
  • 当然你是对的。我花了两天一夜的反复试验才意识到这一点。无论如何,谢谢你的好建议。 :)
  • 我已经更新了答案,因此它包含了我评论的要点,供未来的搜索者使用...
【解决方案2】:

Jonathan Shewchuk 有一个非常流行的 2D 三角测量工具,叫做 Triangle,很快就会出现 3D 版本。他也有一些关于这个主题的论文可能有用。

【讨论】:

  • Fwiw,他的 triangle.c (2005) 是 16k 行,包括 1k 帮助;享受
【解决方案3】:

您可以尝试查看 Henrik Zimmer 的 Voronoi and Delaunay Techniques。我不知道这是否是 Maya 使用的,但该论文描述了一些常用技术。

【讨论】:

  • 看起来很有趣,我去看看。
  • 链接失效了。
【解决方案4】:

Here 您可以找到一个小程序,它演示了计算 3D 中的 Delaunay 三角剖分的增量、礼品包装、分而治之和 QuickHull 算法。提供了指向每个算法的指针。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 2019-11-14
    • 2017-06-30
    • 1970-01-01
    • 2014-04-09
    • 2017-02-09
    • 1970-01-01
    相关资源
    最近更新 更多