行进立方体歧义与行进四面体



我已经成功地实现了行进立方体算法。我使用了标准材料作为参考,但我完全从头开始重写。它是有效的,但我正在观察导致网格中出现漏洞的模糊性。

我在考虑行进四面体算法,据说它不会产生歧义。我不明白这怎么可能。

行进四面体算法使用六个四面体代替立方体,每个四面体都有三角形。但是,假设我要实现行进立方体算法,但对于256个三角形中的每一个,只需选择立方体四面体三角形的"one_answers"(并集)?据我所知,这就是行进四面体的作用——那么为什么这能神奇地解决歧义呢?

我认为有16种独特的情况,其他240种只是这16种情况的反射/旋转。我记得在某篇论文中读到,为了解决歧义,你需要33个案例。这可能与为什么行进的四面体在某种程度上没有遇到问题有关吗?

所以,问题:

  1. 为什么行进四面体不存在歧义
  2. 如果没有,为什么人们不直接使用行进立方体算法,而是使用四面体的三角形

我觉得我错过了什么。谢谢

要回答"为什么行进四面体算法有歧义?"这个问题,首先需要理解为什么在行进立方体中会出现歧义。


当立方体中有两个对角相对的"正"顶点和两个对角相反的"负"顶点时,可能会出现歧义。我花了一些时间来思考它,但模糊性的问题是,理论上它们允许为彼此不兼容的相邻立方体创建等值面补丁。这是显而易见的部分。有趣的是,如果(且仅当)其中一个分离"负"顶点,另一个分离了"正"垂直,则来自两个模糊配置的两个相邻等值面面片是不兼容的。

以下是雷切尔·温格(Rephael Wenger)的巨著《等值面几何、拓扑与算法》(Isosurfaces Geometry,Topology&Algorithms)中的一句相关名言(不能发布超过2个链接,所以我已经将书中所有相关图像合并为一个):

立方体的三维等值面面片的边界定义了立方体的每个方形面上的等中心线。如果某些配置等值面面片将小平面上的负顶点分离,而相邻构造的等值面补片将正极分隔开,则公共面上的等表面边缘将不对齐。这个图2.16中的等值面补片没有将正任何面上的顶点。此外,导出的等值面配置的任何旋转或反射中的补丁也不会在任何面上分离正顶点。因此等值面补片在任意两个相邻的立方体中,在它们的边界上正确地对齐。一同样有效,但组合不同,等值面表可以是通过使用不分离任何正方形面上的负顶点。

这意味着,如果所有使用的模糊配置都遵循相同的模式(即始终分离"负"顶点),则不可能产生拓扑不正确的曲面。如果你对一个等值面使用"来自两个世界"的配置,就会出现问题。

使用相同的模糊性解决模式构建的曲面仍然可能包含这样的错误(摘自Thomas Lewiner Helio Lopes、Antonio Wilson Vieira和Geovan Tavares的文章《利用拓扑保证有效实现Marching Cubes案例》),但正如您所说,它将是滴水不漏的。

为了实现这一点,您需要使用基于图2.16中所示的22种独特配置(而不是标准的14或15)的查找表。


现在,回到最初的问题——为什么行进四面体不存在歧义?出于同样的原因,如果按照上述方式进行,行进立方体中不会有歧义——因为您任意选择使用歧义配置解决方案的两个可用变体之一。在Marching Cubes中,这甚至是一个选项,这一点并不明显(至少对我来说,必须进行大量挖掘),但在Marching四面体中,这是由算法本身完成的。以下是雷切尔?温格的书中的另一句话:

规则网格立方体具有不明确的配置,而四面体分解则不然。模棱两可的人怎么了配置?这些配置可通过选择三角测量。例如,在图2.31中,第一个三角测量给出了具有对应于2B-II的两个分量的等值面补片在图2.22中,而第二个给出了一个具有对应于2B-I。

请注意,在图2.31中,立方体是如何以两种不同的方式切割成四面体的。选择这种切片还是另一种切片是解决歧义的秘密酱汁。

人们可能会问自己——如果模糊性问题可以通过对所有立方体使用相同的模式来解决,那么为什么会有那么多关于更复杂解决方案的书籍和论文?为什么我需要渐近决策器和所有这些东西?据我所知,这一切都归结为你需要实现的目标。如果拓扑正确性(比如,没有洞)对你来说已经足够了,那么你不需要所有高级的东西。如果你想解决上面"Marching Cubes的高效实现">文章中显示的问题,那么你需要更深入地研究。

我强烈建议阅读雷切尔·温格的《等曲面几何、拓扑和算法》一书的相关章节,以更好地了解这些算法的性质、问题是什么、问题来自哪里以及如何解决这些问题。

正如李晓生所指出的,首先仔细研究行进广场算法可以更好地理解基本原理。事实上,整个答案都是李晓生说的,我只是把解释扩大了一点。

好吧,我刚刚完成了我版本的行进四面体的实现,虽然我很容易看到歧义会导致行进立方体的网格出现问题,但行进四面体的网格在拓扑上似乎始终是正确的。沿着非常细的点有一些令人讨厌的特征,其中一些顶点无法完全决定它们想要在分割的哪一边,但网格总是滴水不漏的。

回答我的问题:

  1. 为了解决行进立方体算法中的模糊性,据我所知,可以在单元中更仔细地评估函数。在四面体算法中,明确地对细胞的中心进行采样,并将其多边形化为。我怀疑,因为四面体网格特别包括这个顶点,所以模糊性是隐式处理的。侧面的其他额外顶点可能也与此有关。作为一个关键点,当你对函数进行细化时,它实际上会在更多的地方进行采样
  2. 我很确定他们是这样做的。我的行进四面体算法就是这样做的,我认为,在内部,它所做的事情与经典的行进四面体方法相同。在我的实现中,每个可能的立方体都列出了四面体的三角形,我怀疑这比单独计算每个四面体的一个或两个三角形更快

如果我有足够的时间和注意力(两者都没有),那么最大限度地使用更少的三角形来重新绘制每个立方体的内部可能是有益的,我认为不会对它造成伤害。

以下面的2d示例(它引入了歧义)为例:

01

10

如果我们把这个正方形分成两个三角形,我们将在我们选择的对角线上得到不同的结果。沿着0-0对角线,我们得到三角形(010010),而对于1-1对角线,我们获得三角形(101101)。显然,平方的不同分解会导致不同的结果。两者都是正确的,3D立方体也是如此。

MT实际上并没有解决歧义,但它可以通过对所有立方体选择相同的分解策略来产生拓扑一致的结果。这就是它摆脱歧义的方式。

相关内容

  • 没有找到相关文章

最新更新