Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KG / КГ_5глава.doc
Скачиваний:
136
Добавлен:
26.05.2014
Размер:
542.72 Кб
Скачать

5.4. Общие замечания

Мы рассмотрели шар, цилиндр и тор, а также их некоторые вариации. Оче­видно, что это лишь малая часть всего многообразия трехмерных форм. Тем не менее, можно сделать некоторые обобщения.

Модель описания и способ отображения

Для описания формы поверхности мы использовали аналитическую мо­дель — параметрические формулы

где s и t — параметры, непрерывно изменяющиеся в некотором диапазоне.

В качестве одного из возможных способов построения изображения поверх­ности мы рассматривали такой способ. В процессе рисования выполняется

цикл

Вычисление нормали к грани (Ро, P1, Р2,Рз) или же при интерполяции методом Гуро или Фонга вычисление нормали в вершинах грани (аналитически — вычислением частных производных в соответствующих точках поверхности либо усреднением нормалей к соседним граням).

Определение цветовых атрибутов закрашивания грани.

}

Вычисление экранных координат вершин Ро, P1, Р2 и Рз

Вывод полигона (Ро, Р1,Р2,Рз)

}

Таким образом, здесь вычисляются координаты узлов сетки с шагом ds и dt, Поверхность изображается в виде четырехугольных граней. Чем меньше шаг сетки, тем больше таких граней и тем лучше соответствие форме гладкой по­верхности.

Является ли данный способ отображения поверхности наилучшим? Вряд ли. Здесь каждая точка поверхности вычисляется четырежды, что существенно замедляет процесс, если поверхность описана сложными формулами. Явля­ется ли данный способ самым простым? Вероятно. Можно также подчерк­нуть его экономичность по затратам памяти, поскольку не нужны массивы для хранения координат граней — координаты вычисляются "на ходу". Но главное, что следует подчеркнуть, — этот способ универсален. Его можно применить для отображения широкого класса поверхностей. Он может ис­пользоваться для произвольных поверхностей, для которых известны пара­метрические формулы, например для сплайнов. На рис. 5.53 и 5.54 показаны несколько вариантов изображения кубического сплайна Безье рассматривае­мым способом.

Рис. 5.53. Аппроксимация гладкой поверхности сплайна

Рис. 5.54. Закраска Гуро и наложение текстуры

В компьютерной графике важную роль играет быстродействие вывода. По­высить скорость рисования для рассматриваемого базового алгоритма можно следующим образом. Чтобы избежать повторного вычисления координат вершин граней, вначале следует вычислить узловые координаты всех точек ! поверхности и записать в массив. Затем можно в отдельный массив записать координаты векторов нормалей в вершинах. Потом преобразовать координа­ты и рисовать полигоны граней. Введение дополнительных массивов для вершин и нормалей обычно заметно увеличивает скорость, например, при закрашивании Гуро, поскольку исключаются повторные расчеты не только координат вершин, но и векторов нормалей к соседним граням. Однако общий характер цикла отображения здесь сохраняется. Когда нужно отобразить требуемый объект, то заново вычисляются все узловые координа­ты. А теперь представим себе, что некоторая трехмерная сцена содержит несколько таких объектов. Предположим, что многие объекты остаются не­подвижными, а изменяется лишь ракурс показа. Зачем тогда всякий раз вы­числять мировые (а точнее, некоторые локальные) координаты по парамет­рическим формулам? Их можно вычислить только один раз при инициализа­ции сцены и записать координаты всех вершин (и нормалей, если необходимо) в массивы. А при расчете кадров производить только все необ­ходимые преобразования координат и закрашивание. Более того, можно па­раметрические формулы не вычислять вообще, если хранить описание коор­динат вершин (и нормалей) в файлах соответствующего формата, которые загружаются при инициализации сцены. Так мы постепенно перешли от ана­литической модели описания объектов к полигональной модели, которая также имеет свои плюсы и минусы.

Модель описания и способ отображения, вообще говоря, не обязательно со­ответствуют друг другу.

"Квадратирование" и триангуляция

В качестве небольшого околонаучного развлечения давайте попрактикуемся в терминологии. Рассматриваемый здесь способ отображения поверхностей четырехугольными гранями можно назвать "квадратированием". Способ этот] известен давно, а такое название мы с вами можем изобрести и сами. Оно' кажется достаточно звучным и вполне соответствующим сути, а главное —; может помочь застолбить "непоправимый вклад в науку" (последнее выра­жение в кавычках придумано не мною). А если говорить серьезно, то лучше! все-таки следовать общему правилу — не засорять язык без крайней необхо­димости. Поэтому используем кавычки.

Применение четырехугольных граней для поверхностей общего вида, вообще говоря, это вопрос спорный. Почему именно четырехугольные грани? Для сравнения на рис. 5.55 и 5.56 приведены два варианта граней — четырех­угольники и треугольники.

Рис. 5.55. "Квадратирование" и триангуляция

Рис.5.56. При небольшом числе граней видны существенные отличия

Здесь необходимо упомянуть следующие понятия. Грань называется плоской, если все ее вершины располагаются в одной плоскости трехмерного про­странства. При отображении трехмерного объекта на плоскости пространственные грани (как плоские, так и неплоские) изображаются закрашенными многоугольниками — полигонами. Полигоны бывают выпуклыми и невы­пуклыми. Выпуклый полигон — это фигура на плоскости, контур которой пересекается любой прямой линией только дважды. Если находится такая прямая линия, которая пересекает контур большее число раз, то это невыпук­лый полигон. Это обуславливает особенности алгоритмов графического вы­вода. Алгоритмы вывода полигонов мы рассматривали в главе 3.

Очевидно, что любой треугольник всегда выпуклый. Таким образом, тре­угольная грань в пространстве всегда является плоской и отображается на плоскости выпуклым полигоном. Четырехугольная грань может быть как плоской, так и неплоской. И та и другая четырехугольная грань может ото­бражаться в проекции как выпуклым, так и невыпуклым полигоном. Любой четырехугольник можно изобразить в виде двух треугольников. Некоторые примеры таких полигонов приведены на рис. 5.57.

Рис. 5.57. Изображение четырехугольных граней: а — выпуклый полигон, б — триангуляция, виг — невыпуклые полигоны

Для поверхностей вращения все четырехугольные грани являются плоскими (разумеется, если поверхность аппроксимировать так, как это сделано в пре­дыдущих разделах — по меридианам и параллелям). Если форма — не по­верхность вращения, то такие грани могут быть плоскими, а могут таковыми и не быть. Это можно отметить и для некоторых вариаций формы шара, ци­линдра и тора, приведенных выше. Зачем нужны именно плоские грани? И когда необходимо применять триангуляцию? Для ответа на эти вопросы нужно учитывать многие аспекты.

Алгоритм отображения может вносить некоторую погрешность — в одних случаях заметную, а в некоторых случаях ею можно пренебречь. Триангуля­ция в этом плане является более корректной. В то же время, иногда изобра­жение, построенное из треугольных граней, субъективно выглядит сущест­венно хуже, чем при использовании четырехугольников.

С другой стороны, неплоские грани могут значительно затруднить процесс формирования изображения из-за ограничений используемой технологии. В разных графических системах в этом плане имеются существенные отли­чия. Так, например, при определенном ракурсе показа неплоская четырех-

угольная грань изображается невыпуклым полигоном. Это и приводит к проблемам. Например, в API библиотеки OpenGL в качестве графических примитивов предлагаются только выпуклые полигоны, а в API Windows nof гон-примитив может быть и невыпуклым. Очевидно, что любой невыпуклый полигон может быть разрезан на треугольники (или другие выпуклые фигуры), но это усложняет алгоритм отображения.

Существенную роль играет быстродействие. Например, если в некотор| графической системе два треугольника выводятся быстрее, чем один чец рехугольник, то при прочих равных условиях это может оказаться pemaj щим фактором.

При аппроксимации поверхностей не обязательно использовать постоянщ шаг сетки. -Размеры и ориентация граней могут варьироваться в зависимое! от кривизны участков поверхностей. Это позволяет достичь лучшего coof ношения между точностью аппроксимации и количеством граней.

Соседние файлы в папке KG