我正在尝试实施Marchin Cubes算法,但我有一些问题(这可能非常简单,但我似乎无法找到答案)。
当Isovalue = 5时,我有一个这样的块:
0-------10
| |
| |
0-------5
因为0< 5,左角应标记为" off"。 10应标记为" on"因为10>但是,在右下角的5怎么样?这应该打开还是关闭?
当我使用上面的例子使用lineair插值时(假设5标记为" on"),这是交叉点应该在哪里? (标有x)
----x----
| |
| |
--------x
当我为这个区块画画时,它应该基本上是两个x&#39之间的一条线?
提前致谢!
答案 0 :(得分:1)
Isosurface是沿着线计算的,所以你有一个isosurf和立方体边缘的交点,它给你一个点。
如果iso完全靠近一个角落,这很少见并且为了优化行进立方体,通常可以说任何一个角度接近97%的角度,即4.8 = 5.0
该优化将阻止您在该点周围有多个小的分裂顶点,即0.2宽度的顶点。这是一个有用的优化。
我会在3d中解释因为这就是我所做的。
一旦立方体沿着一条直线上的OR点有交叉点,它就会在数据库中搜索ISOsurf和立方体的可能交叉点模式。
相应的模式将为您提供在该立方体内实现的正确顶点,立方体可以有四边形,例如三角形,它只会使用iso的值来确定三角形的大小。
因此,应该有点和线的交点以及相应的三角形索引全部工作,并且顶点交叉位置基于立方体边缘和角落中的等值面位置的值。