我已成功实施了行进立方体算法。我使用标准材料作为参考,但我完全从头开始重写。它有效,但我观察到导致网格中的洞的模糊性。
我正在考虑行进的四面体算法,据说这种算法不会出现歧义。我没有看到这是可能的。
行进四面体算法使用六个四面体代替立方体,每个四面体都有三角剖分。但是,假设我要实现行进立方体算法,但对于256个三角测量中的每一个,只需选择多维数据集四面体三角剖分的“和”(并集)?据我所知,这就是行进四面体所做的 - 所以为什么这会神奇地修复歧义呢?
我认为有16个独特的案例,而其他240个只是那些16的反思/轮换。我记得在某个地方读某些文字以解决歧义,你需要33个案例。这可能与为什么行军四面体不会出现问题有关吗?
所以,问题:
我觉得我在这里遗漏了一些东西。感谢。
答案 0 :(得分:6)
好吧,我刚刚完成了我的行进四面体版本的实现,虽然我很容易看到模糊不清导致行进立方体的网格出现问题,但行进的四面体网格似乎始终是拓扑正确的。 是沿着非常薄的点的一些令人烦恼的特征,其中一些顶点不能完全决定它们想要在哪个边上,但是网格总是不透水的。
回答我的问题:
如果我有时间和注意力范围(我都不这样做),重新对每个立方体的内部重新使用更少的三角形可能是有益的,我认为不会伤害它
答案 1 :(得分:3)
回答问题"为什么行军四面体算法有歧义?"需要理解为什么在Marching Cubes中首先出现歧义。
当有两个对角线相反的情况下可能会出现歧义"积极的"顶点和两个对角线相反的"负面"多维数据集中的顶点。我花了一些时间来思考它,但是含糊不清的问题是它们理论上允许为彼此不兼容的相邻立方体创建等值面补丁。这是显而易见的部分。有趣的是,如果(且仅当)其中一个分离"否定"来自两个模糊配置的两个相邻的等值面补丁是不兼容的。顶点,另一个分隔"正面" verticies。
以下是Rephael Wenger的伟大着作" Isosurfaces Geometry,Topology& amp;算法" (不能发布超过2个链接,因此我已将书中的所有相关图像合并为single one):
立方体的三维等值面补丁的边界定义了一个 isocontour在每个立方体的方面上。如果有一些配置 等值面补丁分离小平面上的负顶点 相邻配置的等值面贴片将正面贴片分开, 那么公共小平面上的等值面边缘将不对齐。该 图2.16中的等值面补丁不分离正数 任何方面的顶点。而且,衍生的等值面表面 任何旋转或反映配置的补丁也不会 在任何方面分开正顶点。因此,等值面补丁 任何两个相邻的立方体在其边界上正确对齐。一个 同样有效,但组合不同,isosurface表可以 通过使用不分离的等值面补丁生成的 任何方面上的负顶点。
这意味着如果所有使用的模糊配置遵循相同的模式(即总是分开的"负的"顶点),那么就不可能产生拓扑不正确的表面。如果您使用来自两个世界的配置和#34;将会出现问题。对于单个等值面。
使用相同的模糊度解析模式构建的表面仍然可能包含不需要的错误,例如this(摘自"使用拓扑保证高效实施Marching Cubes的情况" Thomas Lewiner的文章Helio Lopes,Antonio Wilson Vieira和Geovan Tavares),但正如你所说,它将是水密的。
为实现此目的,您需要使用基于图2.16中所示的22种独特配置(非标准14或15)的查找表。
现在,最后回到原来的问题 - 为什么前进的四面体不会有歧义?出于同样的原因,如果按照上面的描述完成,则Marching Cubes中不会出现歧义 - 因为您任意选择使用两种可用的模糊配置解析变体之一。在Marching Cubes中,根本不是很明显(至少对我来说,不得不做很多挖掘),这甚至是一个选项,但在Marching Tetrahedrons 它是由算法本身为你完成的 。这是Rephael Wenger的书的另一个引用:
规则的网格立方体具有模糊的配置 四面体分解不会。暧昧的发生了什么 配置简单?这些配置通过选择来解决 三角测量。例如,在图2.31中,第一个三角测量 给出一个等值面贴片,其中两个成分对应于2B-II 在图2.22中,第二个给出了一个等值面补丁 对应于2B-I的组分。
注意如何在图2.31中以两种不同的方式将立方体切成四面体。选择这种切片或另一种是解决模糊性的秘诀。
有人可能会问自己 - 如果只是通过对所有立方体使用相同的模式来解决歧义问题那么为什么有那么多关于更复杂的解决方案的书籍和论文呢?为什么我需要Asymptotic Decider和所有这些东西?据我所知,这一切都归结为你需要实现的目标。如果拓扑正确性(如没有孔)足够你,那么你不需要所有高级的东西。如果您想解决上面显示的" Marching Cubes" 文章的高效实施中所示的问题,那么您需要深入了解。
我强烈推荐阅读Rephael Wenger的书" Isosurfaces Geometry,Topology& amp;算法" 更好地理解这些算法的本质,有什么问题,问题来自何处以及如何解决。
正如李小生所指出的那样,通过仔细检查行军广场算法,可以更好地理解基础知识。实际上,整个答案都是由李小生奠定的,我只是稍微扩展了解释。
答案 2 :(得分:1)
采用以下2d示例(引入含糊不清):
01
10
如果我们将这个方块分成两个三角形,我们将在我们选择划分方形的对角线上得到不同的结果。 沿着0-0对角线,我们得到三角形(010,010),而对于1-1对角线,我们得到三角形(101,101)。显然,方形的不同分解导致不同的结果。两者都是正确的,3D立方体也是如此。
MT实际上并没有解决歧义,但它可以通过为所有立方体选择相同的分解策略来产生拓扑结构。这就是摆脱歧义的方式。