Метод "марширующих кубов"

Классы MarchingCubes1 и MarchingCubes2 предназначены для получения пересечения аппроксимируемой поверхности и куба в методе "марширующих кубов". Вершины куба кодируются восьмибитным числом, а результат выводится в виде массива многоугольников, где вершинами служат номера рёбер, которые поверхность пересекает. В классе MarchingCubes2 эти многоугольники триангулируются. Нумерация вершин и рёбер показана на рисунке:

//          Нумерация вершин и рёбер куба
//
//         4-----7        +-7---+        +-----+
//        /|    /|       4|    6|       /8    /1
//       5-----6 |      +---5-+ |      +-----+ 1
//       | 0---|-3      | +-3-|-+      9 +---1-+
//       |/    |/       |0    |2       |/    0/
//       1-----2        +---1-+        +-----+

class MarchingCubes1
{
    DynArray<DynArray<nat> > poly[256];
public:
    MarchingCubes1();
    CArrRef<DynArray<nat> > operator[] ( nat8 i ) const
    {
        return poly[i];
    }
};

class MarchingCubes2
{
    DynArray<Set3<nat> > poly[256];
public:
    MarchingCubes2();
    CArrRef<Set3<nat> > operator[] ( nat8 i ) const
    {
        return poly[i];
    }
};
Описание шаблонов классов CArrRef и DynArray находится здесь.

Исходники находятся здесь

Наверх