行进立方体等值

Marching Cubes isovalue

我正在尝试实现 Marchin Cubes 算法,但我有一些问题(可能非常微不足道,但我似乎找不到答案)。

当 Isovalue = 5 时,我有一个这样的块:

0-------10
|       |
|       |
0-------5

因为 0 < 5,左边的角都应该被标记 "off"。 10 应该标记为 "on" 因为 10 > 5。但是右下角的 5 呢?这应该打开还是关闭?

当我使用上面的示例使用线性空气插值时(假设 5 被标记为 "on"),这是交点应该在哪里吗? (标有 x)

----x---- 
|       |
|       |
--------x 

当我为这个块绘制时,它应该基本上是两个 x 之间的一条线吗?

提前致谢!

等值面是沿线计算的,因此等值面和立方体边缘的交点为您提供了一个点。

如果 iso 恰好进入拐角,这种情况很少见,为了优化行进立方体,您通常可以说接近拐角的任何值小于 97%,即 4.8 =5.0

该优化将防止您在该点周围有多个小分裂顶点,即 0.2 宽度的顶点。这是一个有用的优化。

我会用 3d 来解释,因为我就是这么做的。

一旦立方体沿线或角具有交点,它就会搜索 ISOsurf 和立方体可能的交点模式的数据库。

相应的模式将为您提供在该立方体中实现的正确顶点,例如立方体可以有四边形、三角形,它只会使用 iso 的值来调整三角形的大小。

所以,应该有点线的交点和对应的三角形索引都有效,顶点交点位置基于立方体边角等值面位置的值。