3D三角测量算法

4

有人知道Maya使用的三角剖分算法吗?如果不知道,最可能尝试哪些算法?我脑海中尝试了一些简单的方法(最短/最长的边缘,最小角度,最小/最大面积),但都是错误的。Delaunay是最合适的算法吗?

编辑:顺便说一句,欢迎提供在3D空间中实现二维四边形Delaunay剖分以生成两个三角形的伪代码!

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


翻转(如您链接中所述)仍然常用于3D网格,但您可能需要额外的约束条件来避免翻转极度非平面的四边形。 - Alan
是的,这个特性似乎需要准确地满足那些约束条件。 - Jonas Byström
4个回答

2
我不想猜测别人的意图,但如果您只是想从Maya中获取在视口中显示的内容,则可以通过使用MItMeshPolygon :: getTriangles来提取Maya的三角剖分。(相应的法线和顶点颜色可以直接访问。UV需要更多的努力 - 我不记得细节(我所有的Maya代码都在我以前的雇主那里),但乍一看,虽然可能看起来您没有数据,但实际上所有数据都在那里,只是不方便而已。)
(另一个注意点 - 如果您的艺术家足够努力,他们可以创建多边形,在调用getTriangles时会使Maya崩溃,即使它们渲染良好且可以通过UI操作。这种情况每隔几个月就会发生,所以值得谨记,但可能不值得过于担心。)
如果您不想使用API或Python,则在导出之前运行polyTriangulate,然后撤消(以恢复原始多边形)将使您能够检查三角剖分网格。(如果您的导出过程执行难以或无法撤消的操作,则可能需要将场景保存到临时文件,然后重新加载该文件并使用文件将其命名为旧名称。)
这有点hacky,但您保证获得Maya使用的确切三角剖分。比编写自己的三角剖分代码要容易得多,几乎可以肯定比尝试弄清Maya在内部做什么要容易得多...

不幸的是,我有Mel,但没有访问C API(工具链几乎完成,我不会替换它)。天哪,自从几个月前我走上反向工程白痴的道路以来,我对Maya的内部越来越恼火了。 :) - Jonas Byström
我猜这就是你想做的事情吧?如果你不能使用Python绑定到C++ API,那么像“polyTriangulate,export,undo”这样的东西可能会有所帮助。(或者,将场景保存到临时文件中,三角剖分,导出,重新加载,使用“file”来给它旧名称,以防你的导出做了一些随机的东西,搞乱了撤消队列。)这有点hacky,但比编写自己的三角剖分代码要容易得多,而且我愿意打赌,这比试图弄清Maya内部的操作要容易得多... - please delete me
当然,你是对的。我试错了两天一夜才意识到这一点。无论如何,感谢你的好建议。 :) - Jonas Byström
1
我已更新答案,以包含我评论的要点,供未来的搜索者参考... - please delete me

1

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


看起来很有趣,我会去看看。 - Jonas Byström
该链接不再可用。 - Endery

1

Jonathan Shewchuk拥有一个非常受欢迎的2D三角剖分工具Triangle,很快将推出3D版本。他还有许多关于这个主题的论文可能会对您有所帮助。


顺便提一下,他的triangle.c(2005)有16k行代码,包括1k帮助文件。祝使用愉快! - denis

0

你可以在这里找到一个演示增量、礼品包装、分治和快速壳算法计算三维德劳内三角剖分的小程序。提供了每个算法的指针。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接