我需要从支持圆形和锐利几何的八叉树或阵列中的体素块生成等值面。我搜索了似乎能够完成此任务的算法,并找到了几种算法,包括 Dual Contouring、Extended Marching Cubes 和 Dual Marching Cubes。然而,前两个需要 Hermite 数据,这似乎是大量内存消耗。此外,我找不到其中任何一个的实际算法,只有期刊中的方程式和模糊描述。任何帮助找到可以解决我的问题的算法将不胜感激。

最佳答案

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

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

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

Dual Marching Cubes (DMC) - 保留清晰的特征,并产生流形网格(处理歧义),也允许自适应细化,但是仍然存在单元间依赖性(由于它的双重性质)并且也不会那么准确,由于它是条子消除过程,它会四舍五入顶点(误差可能可以忽略不计)

我相信还有其他可能的组合,以及完全不同的技术。不过我建议你看看 Cubical Marching Squares (CMS) 。我目前正试图解决它,因为我希望实现它。网上没有太多的实现。但是,它仍然适用于 Hermite Data(据我所知,这与您有关)。

关于c++ - 从体素中提取等值面,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24279828/

10-11 18:46