ПОЛИГОНАЛЬНОЕ МОДЕЛИРОВАНИЕ
Моделирование трехмерных поверхностей полигональными сетками
Полигональные сетки (Polygonal meshes)
- Полигональные сетки – набор полигонов (граней), которые в совокупности формируют оболочку объекта
- Это стандартный способ визуального представления широкого класса объемных фигур Многие системы визуализации основаны на изображении объектов посредством рисования последовательности полигонов
- Это стандартный способ визуального представления широкого класса объемных фигур
- Многие системы визуализации основаны на изображении объектов посредством рисования последовательности полигонов
Достоинства полигональных сеток
- Основаны на простоте использования полигонов:
- Легко представлять и преобразовывать Обладают простыми свойствами
- Легко представлять и преобразовывать
- Обладают простыми свойствами
- Единственный вектор нормали Четко определенные внутренняя и внешняя области Простота рисования подпрограмма закрашивания полигонов или наложения текстуры на плоскую грань Полигональные сетки позволяют представлять трехмерные объекты практически любой степени сложности
- Единственный вектор нормали Четко определенные внутренняя и внешняя области
- Единственный вектор нормали
- Четко определенные внутренняя и внешняя области
- Простота рисования подпрограмма закрашивания полигонов или наложения текстуры на плоскую грань
- подпрограмма закрашивания полигонов или наложения текстуры на плоскую грань
- Полигональные сетки позволяют представлять трехмерные объекты практически любой степени сложности
Пример:
Монолитные объекты и тонкие оболочки
- Полигональные сетки позволяют задавать объекты двух типов:
- Монолитные (solid) объекты
- полигональные грани плотно примыкают друг к другу и ограничивают некоторое пространство
- полигональные грани плотно примыкают друг к другу и ограничивают некоторое пространство
- Примеры: куб, сфера
- Примеры: куб, сфера
- Примеры: куб, сфера
- Тонкие оболочки Полигональные грани примыкают друг к другу без ограничения пространства, представляя собой поверхность бесконечно малой толщины Пример: график функции z=f(x,y)
- Полигональные грани примыкают друг к другу без ограничения пространства, представляя собой поверхность бесконечно малой толщины Пример: график функции z=f(x,y)
- Пример: график функции z=f(x,y)
Примеры:
Вершины полигона
- Каждый полигон определяется путем перечисления его вершин
- Вершина задается при помощи перечисления ее координат в пространстве
Нормаль к полигону
- Вектор нормали задает направление перпендикуляра грани
- При рисовании объекта эта информация используется для определения того, сколько света рассеивается на данной грани
Нормали в вершинах и нормали в поверхностях
- Использование нормалей к грани плохо подходит для визуализации гладких поверхностей, например, сферы
- Удобнее оказывается связывать вектор нормали с каждой вершиной грани
- Такой способ упрощает процесс отсечения и процесс закрашивания гладких криволинейных форм
- Такой способ упрощает процесс отсечения и процесс закрашивания гладких криволинейных форм
Нормали в вершинах и нормали в поверхностях
- Нормаль является атрибутом вершины
Для быстродействия выгоднее хранить отдельную копию вектора нормали для каждой вершины
- Одна и та же вершина может входить в состав нескольких смежных граней
- Вывод: лучше хранить все вершины сетки (с их атрибутами) в отдельном массиве При задании граней указывать индексы используемых вершин
- Вывод: лучше хранить все вершины сетки (с их атрибутами) в отдельном массиве
- При задании граней указывать индексы используемых вершин
Возможные вариации
- Если полигональная сетка задается при помощи однотипных примитивов, например, треугольников, то можно представить грани в виде массива индексов вершин
- Необходимо выбирать структуры данных, наиболее подходящих для решения конкретной задачи
Лицевые и нелицевые стороны граней
- Каждая плоская грань (полигон) имеет две стороны:
- лицевую (видна извне объекта) нелицевую (видна изнутри объекта) В один момент времени с заданной точки видна только одна сторона грани
- лицевую (видна извне объекта)
- нелицевую (видна изнутри объекта)
- В один момент времени с заданной точки видна только одна сторона грани
- Снаружи монолитного объекта видны только лицевые грани Позволяет эффективно отбрасывать лицевые или нелицевые грани, что ускоряет процесс рисования
- Снаружи монолитного объекта видны только лицевые грани
- Снаружи монолитного объекта видны только лицевые грани
- Позволяет эффективно отбрасывать лицевые или нелицевые грани, что ускоряет процесс рисования
Определение видимой стороны грани
- Для определения стороны грани, повернутой к наблюдателю, OpenGL использует направление обхода вершин грани после проецирования
- Позволят выбрать направление обхода вершин лицевых граней
- Позволят выбрать направление обхода вершин лицевых граней
- Направление обхода нелицевых вершин будет противоположным Вершины всех граней сетки необходимо перечислять в одном и том направлении обхода, если смотреть на лицевую сторону граней
- Направление обхода нелицевых вершин будет противоположным
- Направление обхода нелицевых вершин будет противоположным
- Вершины всех граней сетки необходимо перечислять в одном и том направлении обхода, если смотреть на лицевую сторону граней
Обход сторон куба против часовой стрелки
Нахождение нормальных векторов (нормалей)
- Координаты нормалей для каждой вершины можно задавать:
- вручную (в процессе моделирования) вычислять аналитически (перпендикуляр к криволинейной поверхности, описываемой функционально) вычислять на основе полигональной сетки
- вручную (в процессе моделирования)
- вычислять аналитически (перпендикуляр к криволинейной поверхности, описываемой функционально)
- вычислять на основе полигональной сетки
Задание нормалей вручную
- Позволяет задать нормали к поверхности способом, лучшим с точки зрения дизайнера
- Основной недостаток – он очень утомителен и во многих случаях может быть заменен на методы автоматического генерирования нормалей
Редактирование нормалей в программе 3D Studio Max
Аналитический метод нахождения нормалей
- Для функционально заданных поверхностей вектор нормали по направлению совпадает с вектором градиента в точке поверхности
Вычисление нормалей для плоских граней полигональной сетки
- Для плоских граней сетки достаточно вычислить перпендикуляр к каждой грани и связать его с каждой из вершин этой грани
- Использование векторного произведения векторов, соединяющих соседние вершины граней
- Использование векторного произведения векторов, соединяющих соседние вершины граней
- Проблемы: Большие погрешности вычисления в случае выбора почти параллельных векторов Проблемы с гранями, имеющими больше 3 вершин
- Большие погрешности вычисления в случае выбора почти параллельных векторов
- Проблемы с гранями, имеющими больше 3 вершин
Метод Ньюэла для нахождения нормали к плоской грани
- Разработан Мартином Ньюэллом
- Решает указанные проблемы простого способа
Нахождение нормали к вершинам сетки, описывающим криволинейную поверхность
- Грани сетки, описывающей криволинейную поверхность, могут иметь общие вершины
- За вектор нормали в таких вершинах можно принять среднее арифметическое нормалей прилегающих граней
Свойства сеток
- Монолитность
- Совокупность грани сетки заключает в себе некоторое пространство
- Совокупность грани сетки заключает в себе некоторое пространство
- Связность
- Между любыми двумя вершинами сетки существует непрерывный путь вдоль ребер полигонов
- Между любыми двумя вершинами сетки существует непрерывный путь вдоль ребер полигонов
- Между любыми двумя вершинами сетки существует непрерывный путь вдоль ребер полигонов
- Простота Сетка является монолитной и не содержит отверстий
- Сетка является монолитной и не содержит отверстий
- Плоскостность Каждая грань сетки является плоским полигоном
- Каждая грань сетки является плоским полигоном
- Выпуклость Отрезок прямой, соединяющий любые две внутренние точки объекта целиком лежит внутри него
- Отрезок прямой, соединяющий любые две внутренние точки объекта целиком лежит внутри него
Моделирование поверхностей вращения
- Поверхность вращения образуется посредством вращательной развертки с заметанием профильной кривой C вокруг некоторой оси
- Тор Пешка Сфера Купол церкви Рюмки, тарелки Колба лампы накаливания
- Тор
- Пешка
- Сфера
- Купол церкви
- Рюмки, тарелки
- Колба лампы накаливания
Создание поверхности вращения
Поверхности на базе функций двух переменных
- Некоторые поверхности однозначны в одном измерении, поэтому могут быть явно выражены функции двух независимых переменных
- Такие функции еще называют полем высот и задают в виде формулы следующего типа:
- y=f(x, z)
- y=f(x, z)
- Для визуализации таких поверхностей обычно вычисляют значение y в узлах равномерной сетки вдоль осей x и z, а затем рисуют последовательность ячеек полученной сетки
Пример поверхности заданной, функцией sinc с круговой симметрией


Полигональное моделирование (1.98 MB)

