Добавил:
sergeevpavel0406@mail.ru СОВА Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Информатика в техническом университете / Информатика в техническом университете. Компьютерная графика

.pdf
Скачиваний:
83
Добавлен:
06.03.2018
Размер:
6.96 Mб
Скачать

4. Методы, алгоритмы и форматы файлов компьютерной графики

могут учесть взаимно связанные ограничения. С другой стороны, вариационные модели, используя неявные методы решения ограничений, могут обрабатывать связанные ограничения, но они менее быстрые и более ограничены при обработке не полностью определенных или противоречивых моделей.

4.2. Методы и алгоритмы трехмерной графики и геометрии

Алгоритмы создания трехмерных моделей рассмотрены в гл. 3. В литературе по КГ основное внимание уделяется задачам реалистического отображения трехмерных моделей, поэтому рассмотрим алгоритмические основы трехмерной графики в такой последовательности:

алгоритмы визуализации трехмерных моделей;

алгоритмы закрашивания видимых поверхностей;

детальное отображение поверхностей;

алгоритмы анимации трехмерных моделей.

4.2.1. Алгоритмы визуализации трехмерных моделей

После создания трехмерных геометрических моделей необходимо получить реалистическое отображение этих моделей, т. е. визуализировать их для проверки правильности полученных моделей. При этом необходимо определить, как разместить эти модели на сцене и выбрать место обзора с которого будет просматриваться эта сцена, т. е. должна быть выбрана определенная точка наблюдения. Также надо выбрать модель освещения — типы и количество источников света. При этом необходимо помнить, что основным назначением КГ является создание двухмерного изображения трехмерных объектов (оно должно быть двухмерным, так как выводится графически на плоский экран), но, принимая решения насчет объектов, которые будут нарисованы на экране, необходимо мыслить в трехмерных координатах. Будем предполагать, что все необходимые пространственные преобразования для визуализации сцены (поворот, параллельный перенос, масштабирование, зеркальное отражение, ортогональное или перспективное проецирование) выполнены. Поскольку визуализация сцены производится в прямоугольное окно, объекты (или части объектов), лежащие за пределами этого окна, должны отсекаться. В трехмерной КГ отсечение выполняется с помощью отбрасывания объектов, находящихся по одну сторону плоскости отсечения. Алгоритмы трехмерного отсечения (Сазерленда—Ходжмена, Вейлера—Айзертона и др.) во многом схожи с рассмотренными выше алгоритмами двухмерного отсечения.

Для реалистичного отображения простейших каркасных моделей необходимо решить задачу удаления невидимых линий, а для поверхностных и твердотельных моделей — задачу удаления невидимых поверхностей.

346

4.2. Методы и алгоритмы трехмерной графики и геометрии

Рис. 4.59. Каркасная модель без удаления невидимых линий (а) и с удалением невидимых линий (б)

Алгоритмы удаления невидимых линий и поверхностей. Задача удаления невидимых линий и поверхностей является одной из наиболее сложных в машинной графике. Алгоритмы удаления невидимых линий и поверхностей служат для определения линий ребер, поверхностей или объемов, которые видимы или невидимы для наблюдателя, находящегося в заданной точке пространства. Необходимость удаления невидимых линий проиллюстрирована рис. 4.59.

На рис. 4.59, а приведена каркасная модель без удаления невидимых линий. Этот рисунок можно интерпретировать по-разному. Для этого достаточно перефокусировать глаза. Удаление тех линий или поверхностей, которые невидимы с соответствующей точки зрения, позволяет избавиться от неоднозначности. Результаты удаления невидимых линий показаны на рис. 4.59, б.

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

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

347

4. Методы, алгоритмы и форматы файлов компьютерной графики

темой координат того экрана, на котором визуализируются объекты моделирования. При этом точность вычислений ограничена разрешающей способностью экрана. Результаты, полученные в пространстве изображения, нельзя масштабировать вследствие искажений объекта моделирования.

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

Рассмотрим алгоритмы, иллюстрирующие основополагающие идеи теории алгоритмов удаления невидимых линий и поверхностей.

Алгоритм плавающего горизонта. Алгоритм плавающего горизонта чаще всего используется для удаления невидимых линий трехмерного представления функций, описывающих поверхность в виде

f(x,y,z) = 0.

Этот алгоритм обычно работает в пространстве изображения. Главная идея данного метода заключается в сведении трехмерной задачи к двухмерной путем пересечения исходной поверхности последовательностью параллельных секущих плоскостей, имеющих постоянные значения координаты z.

На рис. 4.60, а приведен пример, где указанные параллельные плоскости определяются постоянными значениями z- Функция f(x, у, z) = 0 сводится к последовательности кривых, лежащих в каждой из этих параллельных плоскостей, т. е. у = f(x, zj, где Zi - const на каждой из заданных параллельных плоскостей. Поверхность теперь складывается из последовательности кривых, лежащих в каждой из этих плоскостей (см. рис. 4.60, а). Здесь предполагается, что полученные кривые являются однозначными функциями независимых переменных. Если спроецировать полученные кривые на плоскость z = 0, как показано на рис. 4.60, б, то становится

const

О

Рис. 4.60. Кривые отображаемой поверхности в секущих плоскостях

спостоянной координатой г,:

а— в пространстве; б — в проекции на плоскость ух

348

4.2. Методы и алгоритмы трехмерной графики и геометрии

ясна идея алгоритма удаления невидимых участков отображаемой поверхности. Алгоритм сначала упорядочивает плоскости z = const по возрастанию расстояния до них от точки наблюдения. Затем для каждой плоскости, начиная с ближайшей к точке наблюдения, строится кривая, лежащая на ней, т. е. для каждого значения координаты х в пространстве изображения определяется соответствующее значение у.

Процесс удаления невидимой линии заключается в следующем. Если на текущей плоскости при некотором заданном значении х соответствующее значение у на кривой больше значения у для всех предыдущих кривых при этом значении х, то текущая кривая видима в этой точке; иначе она невидима.

Невидимые участки на рис. 4.60, б показаны пунктиром. Для хранения максимальных значений у при каждом значении х используется массив, длина которого равна числу различимых точек (разрешению) по оси х в пространстве изображения. Значения, хранящиеся в этом массиве, представляют собой текущие значения «горизонта». Поэтому по мере рисования каждой очередной кривой этот «горизонт» как бы «всплывает». Фактически данный алгоритм удаления невидимых линий работает каждый раз с одной линией.

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

а

б

Рис. 4.61. Обработка нижней стороны поверхности:

- исходная поверхность; б — нижняя сторона исходной поверхности

349

4. Методы, алгоритмы и форматы файлов компьютерной графики

то текущая кривая видима. В противном случае она невидима. Полученный результат показан на рис. 4.61, б.

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

Алгоритм Робертса. Алгоритм Робертса — наиболее известный алгоритм, работающий в пространстве объекта. Алгоритм Робертса прежде всего удаляет из каждого тела те ребра или грани, которые экранируются самим телом (нелицевые грани).

При использовании алгоритма Робертса требуется, чтобы все изображаемые тела или объекты были выпуклыми. Невыпуклые тела должны быть разбиты на выпуклые части. В этом алгоритме выпуклое многогранное тело с плоскими гранями должно представляться набором пересекающихся плоскостей. Неплоские грани аппроксимируются плоскими. Уравнение произвольной плоскости в трехмерном пространстве имеет следующий вид:

В матричной форме этот результат имеет вид

[xyzl][P]T=0,

где [Р]т =[А В С D] — плоскость. Поэтому любое выпуклое твердое тело можно выразить матрицей тела V, состоящей из коэффициентов уравнений плоскостей, т. е.

АА2 - К

V= в,

В2

вп

с,

С2

- сп

D,

D2

... Dn

где каждый столбец содержит коэффициенты одной плоскости.

Любая точка пространства представима в однородных координатах вектором 5 = [х у z 1]. Если точка S лежит на плоскости Р, то скалярное произведение

[S] • [Р] = 0. Если же эта точка не лежит на плоскости, то знак этого скалярного произведения показывает, по какую сторону от плоскости расположена точка. В алгоритме Робертса предполагается, что точки, лежащие внутри тела, дают положительное скалярное произведение.

350

4.2. Методы и алгоритмы трехмерной графики и геометрии

Тот факт, что плоскости имеют бесконечную протяженность и что скалярное произведение точки на матрицу тела отрицательно, если точка лежит вне этого тела, позволяет предложить способ определения граней, которые экранируются самим этим телом с помощью матрицы тела. Отрицательное скалярное произведение дает только такая плоскость (столбец) в матрице тела, относительно которой точка лежит снаружи. Если точка наблюдения находится в бесконечности на положительной полуоси z и взгляд направлен в сторону отрицательной полуоси z, то в однородных координатах вектор такого направления равен Е = [0 0 -1 0], который служит, кроме того, образом точки, лежащей в

бесконечности на отрицательной полуоси z. Фактически Е представляет собой любую точку, лежащую на плоскости z = -°°, т. е. любую точку типа (х, у, - <х>). Поэтому если скалярное произведение Е на столбец, соответствующий какой-нибудь плоскости в матрице тела, отрицательно, то Е лежит по отрицательную сторону этой плоскости. Следовательно, эти плоскости невидимы из любой точки наблюдения, лежащей в плоскости z = °°, а пробная точка на z = —°° экранируется самим телом. Такие плоскости называются нелицевыми, а соответствующие им грани — задними. Следовательно, условие S • Р < 0 является условием того, что плоскости — нелицевые, а их грани — задние.

Алгоритм Робертса — простейший алгоритм удаления невидимых граней для тел, представляющих собой одиночные выпуклые многогранники. Он также используется для удаления нелицевых, или задних, граней из сцены перед применением более сложных алгоритмов удаления невидимых линий. Его часто называют отбрасыванием задних плоскостей. Для выпуклых многогранников число граней при этом сокращается примерно вдвое. Этот алгоритм эквивалентен вычислению нормали к поверхности для каждого отдельного многоугольника. Отрицательность нормали к поверхности показывает, что нормаль направлена в сторону от наблюдателя и, следовательно, данный многоугольник не виден. После удаления нелицевых граней, экранированных самими телами, все видимые ребра каждого тела сравниваются с ребрами оставшихся тел для определения того, какая его часть или части, если таковые есть, экранируются этими телами. Поэтому вычислительная трудоемкость алгоритма Робертса пропорциональна квадрату числа объектов. Известны реализации этого алгоритма, использующие предварительную приоритетную сортировку вдоль оси z и простые габаритные, или мини-максные, тесты, демонстрирующие почти линейную зависимость от числа объектов.

Алгоритм, использующий г-буфер. Это один из простейших алгоритмов удаления невидимых поверхностей. Работает этот алгоритм в пространстве изображения. Идея z-буфера является простым обобщением идеи о буфере кадра. Буфер кадра служит для запоминания интенсивности каждого пиксела в пространстве изображения, z-буфер — отдельный буфер глубины, используемый для запоминания координаты z или глубины каждого видимого пиксела в пространстве изображения. В процессе работы глубина или значение z каждого но-

351

4. Методы, алгоритмы и форматы файлов компьютерной графики

вого пиксела, который нужно занести в буфер кадра, сравнивается с глубиной того пиксела, который уже занесен в z-буфер. Если это сравнение показывает, что новый пиксел расположен впереди пиксела, находящегося в буфере кадра, то новый пиксел заносится в этот буфер и, кроме того, производится корректировка z-буфера новым значением г. Если же сравнение дает противоположный результат, то никаких действий не производится. По сути, алгоритм является поиском по х и у наибольшего значения функции z(x, у).

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

Основной недостаток алгоритма — большой объем требуемой памяти. Однако снижение цен на память делает экономически оправданным создание специализированных запоминающих устройств для z-буфера и связанной с ним аппаратуры.

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

Формальное описание алгоритма z-буфера имеет следующий вид:

1)заполнить буфер кадра фоновым значением интенсивности или цвета;

2)заполнить z-буфер минимальным значением z;

3)преобразовать каждый многоугольник в растровую форму в произвольном порядке;

4)для каждого значения (х, у) пиксела в многоугольнике вычислить его

глубину z(x, у). Сравнить глубину z(x, у) со значением z, хранящимся в z-бу- фере в этой же позиции;

5) если z(x, у) > z буфера, то записать атрибуты этого многоугольника (интенсивность, цвет и т. п.) в буфер кадра и заменить z-буфер в этой позиции на z(x, у). В противном случае никаких действий не производить.

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

Алгоритм художника. При реализации всех обсуждавшихся алгоритмов удаления невидимых линий и поверхностей устанавливались приоритеты, т. е.

352

4.2. Методы и алгоритмы трехмерной графики и геометрии

глубины объектов сцены или их расстояния от точки наблюдения. Алгоритмы, использующие список приоритетов, применяют предварительную сортировку по глубине или приоритету. Цель такой сортировки состоит в том, чтобы получить окончательный список элементов сцены, упорядоченных по приоритету глубины, основанному на расстоянии от точки наблюдения. Если такой список окончателен, то никакие два элемента не будут взаимно перекрывать друг друга, и можно записать все элементы в буфер кадра поочередно, начиная с элемента, наиболее удаленного от точки наблюдения. Более близкие к наблюдателю элементы будут заменять информацию о более далеких элементах в буфере кадра. Поэтому задача об удалении невидимых поверхностей решается тривиально.

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

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

Алгоритмы, строящие список приоритетов и использующие z-буфер, могут также применяться и для удаления невидимых линий. При этом ребра каждого многоугольника заносятся в буфер кадра с одним атрибутом, а внутренняя область каждого многоугольника заносится в буфер кадра с атрибутом фона. При таком подходе многоугольники, которые находятся ближе к точке наблюдения, заслоняют ребра многоугольников, которые расположены дальше от нее.

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

Растровая развертка отдельных многоугольников рассматривалась выше. Алгоритмы удаления невидимых линий и поверхностей с построчным сканированием являются обобщением изложенных методов. Эти алгоритмы сводят трехмерную задачу удаления невидимых линий и поверхностей к двухмерной. Сканирующая плоскость определяется точкой наблюдения, расположенной в бесконечности на положительной полуоси z, и сканирующей прямой, как показано на рис. 4.62.

353

4. Методы, алгоритмы и форматы файлов компьютерной графики

 

Плоскость

Плоскость

сканирования

\

сканирования

 

Точки пересечения

 

объектов с плоскостью

 

сканирования

 

Сканирующая

 

прямая

 

О

Рис. 4.62. Сканирующая плоскость у - const (а) и пересечение сканирующей плоскости с многоугольниками (б)

Пересечение сканирующей плоскости и трехмерной сцены определяет окно размером в одну сканирующую строку. Задача удаления невидимых поверхностей решается в пределах этого окна, образованного сканирующей плоскостью. На рис. 4.62, б представлено пересечение сканирующей плоскости с многоугольниками (прямоугольником и треугольником). Этот рисунок показывает, что задача удаления невидимых поверхностей сводится к задаче о том, какой отрезок видим для каждой точки сканирующей строки.

Одним из простейших алгоритмов построчного сканирования, который решает задачу удаления невидимых поверхностей, является разновидность алгоритма z-буфера, рассмотренного выше. Это алгоритм построчного сканирования

сz-буфером. Используемое в нем окно визуализации имеет высоту в одну сканирующую строку и ширину во весь экран. Для каждой сканирующей строки буфер кадра инициализируется с фоновым значением интенсивности, а z-буфер —

сминимальным значением z. Затем определяется пересечение сканирующей строки с двухмерной проекцией каждого многоугольника сцены, если они существуют. Эти пересечения образуют пары точек пересечения. При рассмотрении каждого пиксела на сканирующей строке в интервале между концами пар его глубина сравнивается с глубиной, содержащейся в соответствующем элементе z-буфера. Если глубина этого пиксела больше глубины из z-буфера, то рассматриваемый отрезок будет текущим видимым отрезком. И следовательно, атрибуты многоугольника, соответствующего данному отрезку, заносятся в буфер кадра в позиции данного пиксела; соответственно корректируется и z-буфер в этой позиции. После обработки всех многоугольников сцены буфер кадра размером в одну сканирующую строку содержит решение задачи удаления невидимых поверхностей для данной сканирующей строки. Он выводится на экран дисплея в порядке, определяемом растровым сканированием, т. е. слева направо. В этом алгоритме можно использовать методы устранения ступенчатости, основывающиеся как на пре-, так и на постфильтрации.

354