Классы 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 находится здесь. Исходники находятся здесь Наверх |