回答“为什么行进四面体算法有歧义?”这个问题首先需要了解为什么在 Marching Cubes 中会出现歧义。
当立方体中有两个对角相对的“正”顶点和两个对角相对的“负”顶点时,可能会出现歧义。我花了一些时间来思考它,但含糊不清的问题是它们理论上允许为彼此不兼容的相邻立方体创建等值面补丁。这是显而易见的部分。有趣的是,如果(且仅当)其中一个分隔“负”顶点,而另一个分隔“正”顶点,则来自两个模糊配置的两个相邻等值面补丁是不兼容的。
这是 Rephael Wenger 的名著“等值面几何、拓扑和算法”中的相关引述(不能发布超过 2 个链接,因此我已将书中的所有相关图片合并到single one):
立方体的三维等值面补丁的边界定义了一个
立方体的每个正方形面上的等高线。如果某些配置的
等值面贴片将小平面上的负顶点分开,而
相邻配置的等值面补丁将正数分开,
那么公共面上的等值面边缘将不会对齐。这
图 2.16 中的等值面补丁不分离正
任何面上的顶点。此外,导出的等值面
在配置的任何旋转或反射的补丁也不会
在任何面上分离正顶点。因此等值面补丁
在任何两个相邻的立方体中,它们的边界都正确对齐。一个
同样有效但组合不同的等值面表可以是
通过使用不分离的等值面补丁生成
任何正方形面上的负顶点。
这意味着如果所有使用的模棱两可的配置遵循相同的模式(即总是分开“负”顶点),那么就不可能产生拓扑不正确的曲面。如果您对单个等值面使用“来自两个世界”的配置,则会出现问题。
使用相同的歧义解析模式构建的表面仍然可能包含不需要的错误,例如 this(取自 “具有拓扑保证的 Marching Cubes 案例的有效实现” 文章 Thomas Lewiner Helio Lopes、Antonio Wilson Vieira 和 Geovan Tavares),但正如你所说,它将是不漏的。
要实现这一点,您需要使用基于图 2.16 中所示的 22 种独特配置(不是标准的 14 或 15 种)的查找表。
现在,最后回到最初的问题 - 为什么 Marching Tetrahedrons 不会出现歧义?出于同样的原因,如果按照上述方法完成,Marching Cubes 中不会有歧义 - 因为您任意选择使用歧义配置解析的两种可用变体之一。在 Marching Cubes 中,这甚至是一种选择并不明显(至少对我来说,必须进行大量挖掘),但在 Marching Tetrahedrons 它是由算法本身为你完成的 .这是 Rephael Wenger 书中的另一句话:
规则的网格立方体具有模棱两可的配置,而
四面体分解不会。暧昧是怎么回事
配置?这些配置是通过选择解决
三角测量。例如,在图 2.31 中,第一个三角剖分
给出具有对应于 2B-II 的两个分量的等值面补丁
在图 2.22 中,而第二个给出了一个等值面补丁,其中一个
对应2B-I的组件。
请注意图 2.31 中立方体是如何以两种不同的方式切割成四面体的。这种切片或其他切片的选择是解决歧义的秘诀。
人们可能会问自己——如果只对所有立方体使用相同的模式就可以解决歧义问题,那么为什么会有这么多关于更复杂解决方案的书籍和论文呢?为什么我需要渐近决策者和所有这些东西?据我所知,这一切都取决于您需要实现的目标。如果拓扑正确性(例如,没有漏洞)对您来说就足够了,那么您就不需要所有高级的东西。如果您想解决上面显示的“Marching Cubes 的有效实施”一文中所示的问题,那么您需要更深入地研究。
我强烈建议阅读 Rephael Wenger 的书“Isosurfaces Geometry, Topology & Algorithms” 的相关章节,以更好地了解这些算法的本质、问题是什么、问题来自哪里以及如何解决。
正如李小生所指出的,首先仔细检查行进广场算法可以更好地理解基础知识。其实整个答案都是李小生写的,我只是稍微扩展了一下。