class Face{

int nVerts: // number of vertices in vert array // количество вершин в массиве vert

Point* pt:

// array of vertices in real screen coord's // массив вершин в вещественных экранных координатах float* depth: продолжение &

Удаление невидимых поверхностей

Листинг 13.1 (продолжение) * ч

II array of vertex depths // массив глубин вершин

Plane plane: // data for the plane of the face // данные для плоскости грани

Cuboid extent: // the extent of the face // экстент грани // other properties // другие свойства }: Тип данных Face является расширенным по сравнению с тем типом, который был использован в главе 6. В нем содержатся данные, характеризующие грань, в форме, удобной для доступа к ним подпрограммы HSR и визуализатора. В листинге 13.1 показано, как все это может быть организовано. У грани имеется nVerts вершин, и данные по вершинам хранятся в массивах pt[] и depth[]. Элементы pt[i ] содержат координаты (х, у) для i-й вершины (с точностью вещественного числа), a depth[i] - псевдоглубину этой вершины. Для повышения эффективности работы алгоритма могут добавляться и другие поля. При работе некоторых HSR-алгоритмов грани заносятся в связный список или в двоичное дерево, поэтому могут быть добавлены каналы связи со следующей гранью в списке.

В поле plane содержатся данные (тпх, тпу, тпг, D), характеризующие уравнение плоскости для грани (тпхх + тпуу + тпгг - D); в дальнейшем будет показано, как использовать эти данные. Вектор m - это внешний нормальный вектор к данной грани. Поскольку эта информация используется для определения того, какая из граней ближе, то нам понадобятся вектор m и псевдоглубина D для плоскости, выраженной в деформированной системе координат трехмерного порта просмотра.

Поле extent описывает экстент грани. Экстент, который называют еще ограничивающим шелом, контейнером и даже гизмо, - это прямоугольный параллелепипед, шесть стенок которого ориентированы по координатным осям и плотно охватывают полигон. На рис. 13.5 показана грань, вложенная в свой экстент. Соответствующий тип данных имеет вид:


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