Френсис Хилл

Рис. 6.4. Представление «базового сарая» Существует много различных способов хранения информации о сетке в файле или в программе. Для данного сарая можно использовать список из семи полигонов и для каждого из них список, содержащий вершины полигона и нормали в каждой из этих вершин (всего 30 вершин и 30 нормалей). Однако такая структура была бы избыточной и громоздкой, поскольку у нас всего 10 различных вершин и семь различных нормалей.

Более эффективным является подход, при котором используются три отдельных списка: список вершин, список нормалей и список граней. В списке вершин содержатся координаты различных вершин сетки. В списке нормалей описываются направления различных нормальных векторов, которые имеются в данной модели. Список граней является просто индексом для остальных двух списков. Как мы увидим позднее, наш сарай записывается с помощью 10 вершин, семи нормалей и списком из семи простых дескрипторов граней.

Все три списка работают совместно: список вершин содержит информацию об их координатах, или геометрии; список нормалей содержит информацию об ориентации; а список граней содержит информацию о связности, или топологии.

12 Ф. Хилл Глава 6. Моделирование поверхностей полигональными сетками Таблица 6.1. Список вершин для стандартного сарая

Вершина

x

У

0,5

1,5

0,5

1,5

Таблица 6.2. Список различных встречающихся нормалей

Нормаль

пх

пу

т

-1

-0,707

0,707

0,707

0,707

-1

-1

Список вершин для нашего сарая приведен в табл. 6.1. Список из семи различных нормалей приведен в табл. 6.2. Индексы вершин изменяются от 0 до 9, а индексы нормалей - от 0 до 6. Все векторы, приведенные в этом списке, уже нормированы, поскольку для большинства алгоритмов закраски требуются единичные векторы. (Напомним, что косинус угла между векторами равен скалярному произведению двух соответствующих ортов.)

Таблица 6.3. Список граней для стандартного сарая

Грань

Вершины

Ассоциированная нормаль

0 (левая)

0,5,9,4

0, 0, 0, 0

1 (крыша левая)

3,4,9,8

1, 1, 1, 1

2 (крыша правая)

2,3,8,7

2, 2, 2, 2

3(правая)

1, 2, 7, 6

3, 3, 3/ 3

4 (нижняя)

0, 1, 6, 5

4,4,4,4

5(передняя)

5,6,7,8,9

5^ 5^ 5^ 5^ 5

6 (задняя)

0,4,3,2,1

6, 6/ 6/ 6/ 6

В табл. 6.3 приведен список граней сарая: у каждой грани имеется свой список вершин и нормальный вектор, ассоциированный с каждой вершиной. Для экономии пространства вместо вершин и нормалей используются только индексы. (Поскольку каждая поверхность плоская, всем вершинам одной грани соответствует одна и та же нормаль.) Список вершин для каждой грани начинается с какой-либо вершины на этой грани и обходит эту грань от вершины к вершине до тех пор, пока не будет пройден полный круг. Существует два способа обхода полигона: по и против часовой стрелки. Например, грань № 5 может быть внесена в список как (5,6,7,8,9) или как (9,8,7,6,5). Можно использовать любое направление, однако мы следуем соглашению, которое принято на практике: обходим полигон против часовой стрелки, если смотреть на объект снаружи.


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