Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_4 Трехмерное моделирование полигональными с....doc
Скачиваний:
29
Добавлен:
04.12.2018
Размер:
275 Кб
Скачать
☆

1. Понятие полигональнОй сетки

Полигональные сетки являются просто набором полигонов, или «граней», которые в совокупности формируют «оболочку» объекта. Сетки в графике являются стандартным способом представления широкого класса форм. Популярность полигональных сеток в графике основана на простоте использования полигонов: их легко представлять (последовательностью вершин) и преобразовывать, у них простые свойства (единственный нормальный вектор, четко определяемые внутренняя и внешняя области и т.д.); кроме того, их просто рисовать.

Многие системы визуализации, в том числе OpenGL, основаны на изображении объектов посредством рисования последовательности полигонов. Каждая грань полигона посылается в графический конвейер, где ее вершины подвергаются различным преобразованиям, и та часть грани, которая осталась после отсечения, закрашивается или «затеняется» и демонстрируется на устройстве отображения.

Полигональная сетка задается списком полигонов и информацией о направлении, куда «обращен» каждый полигон. Информация о направлении часто задается в виде нормали к плоскости его грани. Эта информация используется при закрашивании объекта для определения того, сколько света от источника рассеивается на этой грани.

2. Построение полигональной сетки

Оказывается, выгоднее связывать нормальный вектор с каждой вершиной грани, чем задавать одну нормаль для целой грани, подобная практика упрощает процесс отсечения и процесс закрашивания для гладких криволинейных форм. Для плоских поверхностей, каждая из вершин v1, v2, v3, будет ассоциирована с одной и той же нормалью n0, которая является нормальным вектором для всей грани (рис. 2.1).

На рис. 2.1 и 2.2 показан тетраэдр. Он имеет 4 полигональные грани и 4 вершины (каждая из которых одновременно принадлежит трем граням). У тетраэдра имеется всего 4 различных нормальных векторов: по одной на каждую грань, как показано на рис. 2.2.

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

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

Таблица 1. Список вершин для тетраэдра

Вершина v

x

y

z

0

0

0

0

1

1

0

0

2

0

1

0

3

0

0

1

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

Нормаль n

x

y

z

0

0.577

0.577

0.577

1

0

0

-1

2

-1

0

0

3

0

-1

0

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

Список вершин для нашего тетраэдра приведен в табл. 1. Список из четырех различных нормалей приведен в табл. 2. индексы вершин и нормалей изменяются от 0 до 3. Все векторы, приведенные в списке нормалей, уже нормированы, поскольку для большинства алгоритмов закраски требуются единичные векторы.

Грань f

Вершины v

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

0

1, 2, 3

0, 0, 0

1

0, 2, 1

1, 1, 1

2

0, 3, 2

2, 2, 2

3

1, 3, 0

3, 3, 3

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

В табл. 3. приведен список граней тетраэдра: у каждой грани имеется свой список вершин и нормальный вектор, ассоциированный с каждой вершиной. Для экономии пространства вместо вершин и нормалей используются только индексы.

(Поскольку каждая поверхность плоская, всем вершинам одной грани соответствует одна и та же нормаль). Список вершин для каждой грани начинается с какой-либо вершины на этой грани и обходит эту грань от вершины к вершине до тех пор, пока не будет пройден полный круг. Существует два способа обхода полигона: по и против часовой стрелки. Например, грань f2 может быть внесена в список как (v0, v3, v2) или как (v2, v3, v0). Можно использовать любое направление, однако мы следуем соглашению, которое принято на практике: обходим полигон против часовой стрелки, если смотреть на объект снаружи.