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[].


⇐ Предыдущая| |Следующая ⇒