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