从体素中提取锐利的等值面

时间:2014-06-18 07:47:16

标签: c++ voxel marching-cubes

我需要从八角形或阵列中的体素块生成一个等值面,该阵列支持圆角和锐利的几何体。我已经搜索了似乎能够完成此任务的算法并找到了几个,包括双轮廓,扩展行进立方体和双行进立方体。然而,前两个需要Hermite数据,这似乎是一个巨大的内存消耗。另外,我找不到任何这些的实际算法,只能找到期刊和模糊描述的方程式。任何帮助找到将解决我的问题的算法将非常感激。

1 个答案:

答案 0 :(得分:4)

你提到的那些是最突出的。 但请记住,它们也有一些限制:

扩展行进立方体(EMC) - 通过考虑样本法线(以及法线的梯度)来保留尖锐的特征,但这种方法仍然不是拓扑一致的(同胚),​​它没有不允许自适应细化(网格的简化)并且具有单元间依赖性(由于边缘翻转过程;这不允许最终的GPU加速)。

双轮廓(DC) - 保留清晰的特征并且可以自适应地细化,但具有细胞间依赖性,并且还产生非流形网格。

双行进多维数据集(DMC) - 保留清晰的特征,并生成流形网格(处理模糊),也允许自适应细化,但仍然受到细胞间依赖性的影响(由于它的双重性)因为它的条子消除过程会使顶点变圆(误差可能可以忽略不计),所以也不会那么准确。

我相信还有其他可能的组合,以及完全不同的技术。不过我建议你看一下Cubical Marching Squares (CMS)。我正在试图解决它,因为我希望实现它。它没有太多的在线实现。然而,它仍然适用于Hermite数据(据我所知,这对你很重要。)