行进立方体(C++到C#)

Marching Cubes (C++ to C#)

本文关键字:C++ 立方体      更新时间:2023-10-16

我正试图在C#中实现行进立方体,但我遇到了一个不理解算法的部分,也不知道如何实现它。

int Polygonise(GRIDCELL grid, double isolevel, TRIANGLE *triangles)

第三个论点我真的不明白。我知道它是一个指针,但稍后在算法中,当你设置三角形时,它看起来就像triangles变量是TRIANGLE结构的数组:

int ntriang = 0;
for (int i=0; triTable[cubeindex,i]!=-1; i+=3) {
    triangles[ntriang].p[i  ] = vertlist[triTable[cubeindex,i  ]];
    triangles[ntriang].p[i+1] = vertlist[triTable[cubeindex,i+1]];
    triangles[ntriang].p[i+2] = vertlist[triTable[cubeindex,i+2]];
    ntriang++;
}

注意triangles[ntriang]。这没有意义,因为在我们将triangles设置为TRIANGLE *triangles之前。我也不明白为什么它是一个指针。

Polygonize的调用方期望*triangles指向一个足够长的已分配数组,以包含所有三角形。c#中的等价物可以是TRIANGLE[]List<TRIANGLE>()

看起来这个函数获取体素/细胞的GRID并输出三角形。它是一个指针,因为你会得到一个三角形列表。