我已经成功地实现了marching cubes算法。我用标准材料作为参考,但我从头重写。它起作用了,但是我观察到了导致网格上出现洞的模糊性。
我在考虑行进四面体算法,它应该不会有歧义。我不明白这怎么可能。
行进四面体算法使用六个四面体代替立方体,每个四面体都有三角形剖分。但是,假设我要实现marching cube s算法,但是对于256个三角剖分中的每一个,只需选择一个,即立方体四面体三角剖分的“和”(并)?据我所知,这就是行进四面体所做的——那为什么它神奇地解决了模棱两可的问题呢?
我认为有16种独特的情况,另外240种只是这16种情况的反射/旋转。我记得在某个地方读过一篇论文,为了解决歧义,你需要33个案例。这是否与为什么行进中的四人组不存在问题有关?
所以,问题是:
为什么行进中的四面体不存在歧义?
如果没有,为什么人们不使用marching cubes算法,而是使用四面体的三角剖分呢?
我觉得我好像少了点什么。谢谢。
最佳答案
好吧,我刚刚完成了我的marching四面体版本的实现,虽然我很容易看到模棱两可导致marching立方体的网格出现问题,但marching四面体的网格在拓扑上似乎始终是正确的。沿着非常薄的点有一些恼人的特征,其中一些顶点不能很好地决定他们想要在分割的哪一边,但是网格总是不透水的。
在回答我的问题时:
为了解决marching cubes算法中的歧义,据我所知,有人在单元格中更仔细地计算函数。在四面体算法中,一个显式地采样细胞的中心,并对其进行多边形化。我怀疑,因为四面体网格特别包括这个顶点,所以模糊性是隐式处理的。边上的其他额外顶点也可能与此有关。作为一个关键点,当你去优化函数时,它实际上是在更多的地方被采样的。
我很肯定他们会的。我的行进四面体算法就是这么做的,我认为,在内部,它做的和经典的行进四面体算法一样。在我的实现中,四面体的三角形都是针对每个可能的立方体列出的,我怀疑这比分别计算每个四面体的一个或两个三角形要快。
如果我有时间和注意力跨度(我也不知道),那么对每一个立方体的内部重新网格化使用最大的三角形可能是有益的,我认为这不会伤害到它。
关于algorithm - 行进的多维数据集歧义与行进的四面体,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11074462/