C ++ Marching Cubes算法说明

我正在尝试在C ++中基于这个描述来实现行进立方体算法:

http://paulbourke.net/geometry/polygonise/

但我不明白你如何计算“GRIDCELL”值。 确切的说

 double val[8];

部分对我来说不清楚它的作用。 我看了一些例子,但它们太复杂,很难理解这些值是如何计算的。

typedef struct {
   XYZ p[8];
   double val[8];
} GRIDCELL;

据我了解XYZ p [8]; 是立方体的顶点坐标。 但是val [8]; 是什么? 你也可以解释如何计算它们吗?

谢谢!


行进立方体算法 - 如链接描述中所解释的 - 从采样数据构建多边形表示的算法。 该

double val[8];

是立方体8个顶点的样本。 所以他们不计算它们是来自例如MRI扫描的测量结果。 所以算法是相反的:取一组测量的数字并从中构建一个可视化的曲面表示。


我做了小小的研究,现在我完全理解了算法。

首先:

  • 体素表示三维空间中规则网格上的值。
  • 我没有意识到这一点,但现在我是。

    这个值只是代表等值面。 换句话说,密度。

    double val[8];
    

    为了简化:从-1.0到0.0,体素可以是固体或不固体。

    对于iso值,可以使用perlin / simplex噪声。


    Te val是细胞每个顶点的“电荷”水平,它取决于您想要创造的形状。 fe:如果你想制作一个球,你可以用公式对数值进行采样:

     for (int l = 0; l < 8; ++l){
               float distance = sqrtf(pow(cell.p[l].x - chargepos.x, 2.0) + pow(cell.p[l].y - chargepos.y, 2.0) + pow(cell.p[l].z - chargepos.z, 2.0));
    
        cell.val[l] = chargevalue /pow(distance, 2.0);}
    
    链接地址: http://www.djcxy.com/p/6349.html

    上一篇: C++ Marching Cubes Algorithm Explanation

    下一篇: dual marching cubes table