行进立方体等值

Posted

技术标签:

【中文标题】行进立方体等值【英文标题】:Marching Cubes isovalue 【发布时间】:2016-03-19 19:59:10 【问题描述】:

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

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

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

因为 0 5。但是右下角的 5 呢?这应该打开还是关闭?

当我使用上面的示例使用 lineair 插值时(假设 5 标记为“on”),这就是交点应该在的位置吗? (标有 x)

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

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

提前致谢!

【问题讨论】:

【参考方案1】:

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

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

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

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

一旦立方体的交点沿线 OR 在一个角上,它就会在数据库中搜索 ISOsurf 和立方体的可能相交模式。

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

因此,点和线的交点和对应的三角形索引都应该起作用,并且顶点的交点位置基于立方体边缘和角落中的等值面位置的值。

【讨论】:

以上是关于行进立方体等值的主要内容,如果未能解决你的问题,请参考以下文章

行进立方体未创建预期的网格

估计行进立方体输出几何的大小

计算行进立方体网格的法线、索引和 UV 坐标

为啥不更新重绘场景?

移动立方体的算法原理及C++实现

移动立方体的算法原理及C++实现