Марширующие кубы (от 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 вокселей / ячеек и выводит треугольники. Это указатель, так как вы получите список треугольников.

Другие вопросы по тегам