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