如何加快行军立方体?

我正在使用此MeshGeomtry3D多维数据集算法绘制3D等值面(移植到C#中,输出MeshGeomtry3D ,但其他方面相同)。 由此产生的表面看起来不错,但需要很长时间来计算。

有什么方法可以加速行军立方体? 最明显的是简单地减少空间采样率,但是这降低了所产生的网格的质量。 我想避免这种情况。

我正在考虑一种双通道系统,第一次通过的样本空间要粗得多,这样可以消除场强远低于我的水平的情况。 这是明智的吗? 什么是陷阱?

编辑:已对代码进行概要分析,大部分CPU时间在行进立方体例程本身与每个网格单元角落的场强计算之间分开。 现场计算超出了我的控制范围,因此加速立方体例程是我唯一的选择。

我仍然想要消除死空间,因为这会大大减少对两个系统的呼叫数量。


我知道这有点旧了,但我最近实现了基于同一来源的Marching Cubes。 这里有很多低效率。 至少如果你正在做类似的事情

for (int x=0; x<densityArrayWidth; x++)
  for (int z=0; z<densityArrayLength; z++)
    for (int y=0; y<densityArrayHeight; y++)
      Polygonize(Gridcell, isolevel, Triangles)

看看你会重新分配edgeTable和Tritable多少次! 那些立即需要搬到整个班级。 我也抛弃了gridCell对象,直接从点/值到三角形。

简而言之,它不仅仅是算法的复杂性,内存分配(并且在这个基础中有大量的内存分配)也需要花费时间。


为了防止其他人在这里结束,通过更粗略的采样率消除死区,几乎没有任何区别。 任何远程安全(即:允许边界采样伪像)较粗糙的采样最终会在任何远程非平凡领域抓取大部分网格。

加速潜在的现场评估(带有沉重的记忆)似乎大多解决了性能问题。


尝试推进四面体 - 数学更简单,使您可以考虑每个单元更少的情况。

链接地址: http://www.djcxy.com/p/37241.html

上一篇: How to speed up marching cubes?

下一篇: DirectX/C++: Marching Cubes Indexing