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