int vertlndex: // index of this vertex in the vertex list // индекс этой вершины в списке вершин
int normlndex: // index of this vertex's normal // индекс нормали этой вершины }: продолжение £
Моделирование поверхностей полигональными сетками
Листинг 6.1 (продолжение)
//II ii ii и и и и н п и ii и iiwmm Face шшншштж
class Face{ public:
int nVerts: // number of vertices in this face // число вершин этой грани
VertexID *vert: // the list of vertex and normal indices // список индексов вершин и нормалей
Face(){nVerts -0; vert -NULL:} // constructor // конструктор
-Face(){delete[] vert: nVerts =0:} // destructor // деструктор }:
//шинiiiiiiiiiiiiiHmmm Mesh иттппшмтнё
class Mesh{ private:
int numVerts: // number of vertices in the mesh // число вершин в сетке
Point3* pt: // array of 3D vertices // массив трехмерных вершин
int numNormals: // number of normal vectors for the mesh // число нормальных векторов сетки
Vector3 *norm: // array of normals // массив нормалей
int numFaces: // number of faces in the mesh // число граней в сетке
Face*face; // array of face data // массив данных граней //…others to be added later //… другие, которые будут добавлены позже public:
MeshO: // constructor // конструктор
-MeshO: // destructor // деструктор
int readFile(char * fileName): // to read in a filed mesh // для чтения сетки из файла ..others .. ..Другие ..
6.2. Введение в трехмерное моделирование полигональными сетками В листинге 6.1 приведено определение класса Mesh, а также двух простых вспомогательных классов: VertexID и Face1. Объект Mesh содержит список вершин, список нормалей и список граней, которые представлены соответственно массивами pt, norm и face. Эти массивы размещаются динамически во время выполнения, когда уже известны их размеры. Их длины записываются в переменные numVerts, numNormal s и numFaces соответственно. Позже можно добавить дополнительные поля данных для описания различных физических свойств объекта, таких как вес объекта и тип материала, из которого он сделан.
Тип данных Face - это, по существу, список вершин и нормальный вектор, связанный с каждой вершиной грани. Здесь этот тип данных организован как массив пар индексов: v-я вершина f-й грани имеет координаты pt[face[f].[vert[v].vertlndex], а ее нормальный вектор - norm[face[f].[vert[v]. normlndex]. Такой формат на первый взгляд выглядит громоздким, однако схема индексирования является вполне упорядоченной и простой в управлении, а также весьма эффективной, так как обеспечивает быструю индексную адресацию «случайного доступа» в массив pt[].