Марширующие кубы (от C++ до C#)
Я пытаюсь реализовать марширующие кубы в 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
, Я также не понимаю, почему это указатель.
2 ответа
Вызывающая сторона Polygonize
надеется *triangles
указать на выделенный массив достаточно долго, чтобы содержать все треугольники. Эквивалентом в C# может быть TRIANGLE[]
или List<TRIANGLE>()
Похоже, что эта функция берет GRID вокселей / ячеек и выводит треугольники. Это указатель, так как вы получите список треугольников.