
- •1. Зарождение компьютерной графики.
- •2. 1960-е годы. Становление КГ.
- •1.2. Области применения компьютерной графики
- •1.4. Устройства вывода компьютерной графики
- •Контрольные вопросы и упражнения
- •2. АРХИТЕКТУРА ГРАФИЧЕСКИХ РАБОЧИХ СТАНЦИЙ
- •2.1. Рабочие станции
- •2.2. Графический ускоритель
- •2.4. Технология 3D-графики
- •Контрольные вопросы и упражнения
- •3.1. Общие положения методов представления видеоинформации
- •3.2. Алгоритмы архивации без потерь
- •3.3. Алгоритмы архивации с потерями
- •Контрольные вопросы и упражнения
- •4. ГЕОМЕТРИЧЕСКОЕ МОДЕЛИРОВАНИЕ
- •4.1. Представление моделей
- •4.2. Способы представления объектов
- •Представление поверхностных моделей
- •4.4. Алгоритмы построения геометрических моделей тел
- •4.4.1. Построение правильных многогранников
- •4.4.2. Построение икосаэдра
- •4.4.3. Построение додекаэдра и сферы
- •Аффинные преобразования на плоскости
- •Однородные координаты точки
- •Аффинные преобразования в пространстве
- •Изометрическая проекция
- •Пример:
- •Перспективная проекция
- •5.4. Этапы создания графического объекта
- •Преобразования положения объекта
- •5.5. Работа с матрицами и векторами
- •Контрольные вопросы и упражнения
- •6.1.2. Простой метод устранения ступенчатости
- •6.1.3. Алгоритм Ву для растеризации отрезка с антиалиасингом
- •6.3. Закраска области, заданной цветом границы
- •Контрольные вопросы и упражнения
- •7. ЗАДАЧА ОТСЕЧЕНИЯ
- •7.1. Отсечение отрезков
- •7.1.4. Двумерный алгоритм Кируса-Бека
- •7.1.5. Проверка выпуклости и определение нормалей
- •7.2. Разбиение невыпуклых многоугольников
- •Алгоритм Сазерленда-Ходгмана
- •Контрольные вопросы и упражнения
- •8.4. Задача вычисления точек пересечений
- •8.4.1. Пересечение луча со сферой
- •8.4.3. Пересечение луча с многоугольником
- •8.4.4. Пересечение луча с треугольником
- •Решение будет состоять из следующих шагов:
- •Если мы вычислим единичные векторы Pa1, Pa2, Pa3
- •тогда углы будут равны
- •8.4.5. Пересечение с прямоугольным параллелепипедом
- •Контрольные вопросы и упражнения
- •9. АЛГОРИТМЫ УДАЛЕНИЯ СКРЫТЫХ ЛИНИЙ И ПОВЕРХНОСТЕЙ
- •9.1. Классификация методов удаления невидимых частей
- •9.2.1. Отсечение нелицевых граней
- •9.2.2. Ограничивающие тела (Bounding Volumes)
- •9.2.4. Иерархические структуры (Hierarchies)
- •9.3. Алгоритмы удаления линий
- •9.4.1. Алгоритм удаления поверхностей с Z-буфером
- •Построчный z-буфер
- •9.4.2. Алгоритм разбиения области Варнока
- •9.4.3. Построчный алгоритм Уоткинса
- •9.4.4. Алгоритм трассировки лучей
- •9.4.5. Алгоритмы упорядочения
- •9.4.6. Метод сортировки по глубине. Алгоритм художника
- •9.4.7. Метод двоичного разбиения пространства
- •9.5. Пример реализации алгоритма удаления невидимых граней
- •Контрольные вопросы и упражнения
- •10. ПОСТРОЕНИЕ РЕАЛИСТИЧЕСКИХ ИЗОБРАЖЕНИЙ
- •10.1. Модели освещения
- •10.1.1. Механизм диффузного и зеркального отражения света
- •10.1.2. Модели закраски
- •10.1.3. Прозрачность
- •10.1.4. Тени
- •10.2. Фактура (текстурирование)
- •10.4. Трассировка лучей
- •10.5. Излучательность
- •Контрольные вопросы и упражнения
- •11. ИНТЕРАКТИВНЫЕ СИСТЕМЫ. СОВРЕМЕННЫЕ СТАНДАРТЫ 3D-ГРАФИКИ
- •Аппаратно-независимые графические протоколы
- •Контрольные вопросы и упражнения
- •ЗАКЛЮЧЕНИЕ
- •СПИСОК ЛИТЕРАТУРЫ
- •ИСТОЧНИКИ ИНТЕРНЕТ
188
9.4.3.Построчный алгоритм Уоткинса
Валгоритмах построчного сканирования результирующее изображение генерируется построчно, причем подобно ранее рассмотренному алгоритму построчной заливки многоугольника используется связность соседних растровых строк изображения. Отличие состоит в том, что учитываются все, а не один многоугольник.
Алгоритм работает в пространстве изображения с окном высотой в одну строку и шириной в экран, тем самым трехмерная задача сводится к двумерной.
Последовательность шагов алгоритма:
-построение списка ребер;
-построение списка многоугольников;
-построение списка активных ребер – создается таблица ребер, включающая все негоризонтальные ребра многоугольников, причем элементы таблицы по значению Y-координаты отсортированы по группам.
9.4.4.Алгоритм трассировки лучей
При рассмотрении этого алгоритма предполагается, что наблюдатель находится на положительной полуоси z, а экран дисплея перпендикулярен оси z и располагается между объектом и наблюдателем.
Удаление невидимых (скрытых) поверхностей в алгоритме трассировки лучей выполняется следующим образом:
-Сцена преобразуется в пространство изображения.
-Из точки наблюдения в каждый пиксель экрана проводится луч, и определяется, какие именно объекты сцены пересекаются с лучом.
-Вычисляются и упорядочиваются по z координаты точек пересечения объектов с лучом. В простейшем случае для непрозрачных поверхностей без отражений и преломлений видимой точкой будет точка с максимальным значением z- координаты. Для более сложных случаев требуется сортировка точек пересечения вдоль луча.
Ясно, что наиболее важная часть алгоритма – процедура определения пересечения, которая в принципе выполняется Rx×Ry×N раз (здесь Rx, Ry – разрешение дисплея по x и y соответственно, а N – количество многоугольников в сцене).

189
Очевидно, что повышение эффективности может достигаться сокращением времени вычисления пересечений и избавлением от ненужных вычислений. Последнее обеспечивается использованием геометрически простой оболочки, объемлющей объект – если луч не пересекает оболочку, то не нужно вычислять пересечения с ним многоугольников, составляющих исследуемый объект.
При использовании прямоугольной оболочки определяется преобразование, совмещающее луч с осью z. Оболочка подвергается этому преобразованию, а затем попарно сравниваются знаки xmin с
xmax и ymin с ymax. Если они различны, то есть пересечение луча с оболочкой (рис. 9.12.).
Рис. 9.12. Определение пересечения луча и оболочки
При использовании сферической оболочки для определения пересечения луча со сферой достаточно определить расстояние от луча до центра сферы. Если оно больше радиуса, то пересечения нет. Параметрическое уравнение луча, проходящего через две точки
P1(x1, y1, z1) и P2 (x2 , y2, z2 ), имеет вид:
P(t) = P1 + (P2 − P1 )t .
Минимальное расстояние от точки центра сферы P0 (x0 , y0, z0 ) до
луча равно
d 2 = (x − x0 )2 +( y − y0 )2 + (z − z0 )2.
Этому соответствует значение t
t = −(x2 − x1)(x1 − x0 ) +(2y2 − y1)( y1 −2 y0 ) +(z2 −2 z1 )(z1 − z0 ) ,
(x2 − x1) +( y2 − y1 ) +(z2 − z1)
если d 2 > R2 , то луч не пересекает объекты, заключенные в оболочку. Дальнейшее сокращение расчетов пересечений основывается на использовании групп пространственно связанных объектов. Каждая
190
такая группа окружается общей оболочкой. Получается иерархическая последовательность оболочек, вложенная в общую оболочку для всей сцены. Если луч не пересекает какую-либо оболочку, то из рассмотрения исключаются все оболочки, вложенные в нее, и, следовательно, объекты. Если же луч пересекает некоторую оболочку, то рекурсивно анализируются все оболочки, вложенные в нее.
Наряду с вложенными оболочками для сокращения расчетов пересечений используется отложенное вычисление пересечений с объектами. Если обнаруживается, что объект пересекается лучом, то он заносится в специальный список пересеченных. После завершения обработки всех объектов сцены объекты, попавшие в список пересеченных, упорядочиваются по глубине. Заведомо невидимые отбрасываются, а для оставшихся выполняется расчет пересечений, и отображается точка пересечения, наиболее близкая к наблюдателю.
Дополнительное сокращение объема вычислений может достигаться отбрасыванием нелицевых граней, учетом связности строк растрового разложения и т.д.
Для сокращения времени вычислений собственно пересечений предложено достаточно много алгоритмов, упрощающих вычисления для определенной формы задания поверхностей.
9.4.5. Алгоритмы упорядочения
Методы упорядочения являются гибридными методами, осуществляющими сравнение и разбиение граней в объектном пространстве, а для непосредственного наложения одной грани на другую использующими растровые свойства дисплея.
Методы упорядочения выносят сравнение по глубине за пределы циклов и производят сортировку граней явным образом. Подобный алгоритм можно описать следующим образом:
sort objects by z for all objects
for all visible pixels paint
Упорядочим все лицевые грани таким образом, чтобы при их выводе в этом порядке получалось корректное изображение сцены. Для этого необходимо, чтобы для любых двух граней Р и Q та из них, которая при выводе может закрывать другую, выводилась позже. Такое упорядочение обычно называется back-to-front, поскольку сначала выводятся более далекие грани, а затем более близкие.

191
Существуют различные методы построения подобного упорядочения. Вместе с тем нередки и случаи, когда заданные грани упорядочить нельзя (рис. 9.13). Тогда необходимо произвести дополнительное разбиение граней так, чтобы получившееся после разбиения множество граней уже можно было упорядочить.
Заметим, что две любые выпуклые грани, не имеющие общих внутренних точек, можно упорядочить всегда. Для невыпуклых граней это в общем случае неверно (рис. 9.14).
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 9.13. Наложение выпуклых граней |
Рис. 9.14. Наложение невыпуклых |
||||
|
|
|
|
граней |
9.4.6. Метод сортировки по глубине. Алгоритм художника
Этот метод является самым простым из методов, основанных на упорядочении граней. Как художник сначала рисует более далекие объекты, а затем поверх них более близкие, так и метод сортировки по глубине сначала упорядочивает грани по мере приближения к наблюдателю, а затем выводит их в этом порядке.
Метод основывается на следующем простом наблюдении: если для двух граней A и B самая дальняя точка грани A ближе к наблюдателю (картинной плоскости), чем самая близкая точка грани B, то грань B не может закрыть грань A от наблюдателя.
Поэтому если заранее известно, что для любых двух лицевых граней ближайшая точка одной из них находится дальше, чем самая дальняя точка другой, то для упорядочения граней достаточно просто отсортировать их по расстоянию от наблюдателя.
Однако такое не всегда возможно: могут встретиться такие пары граней, что самая дальняя точка одной находится к наблюдателю не ближе, чем самая близкая точка другой.
На практике часто встречается следующая реализация этого алгоритма: множество всех лицевых граней сортируется по ближайшему расстоянию до картинной плоскости, и потом эти грани выводятся в порядке приближения к наблюдателю. Метод эффективен для целого ряда типичных сцен, включая, например, построение изображения нескольких непересекающихся простых тел.

192
Хотя подобный подход и эффективен в подавляющем большинстве случаев, однако возможны ситуации, когда просто сортировка по расстоянию до картинной плоскости не обеспечивает правильного упорядочения граней (рис. 9.15). Так, грань B будет ошибочно выведена раньше, чем грань A; поэтому после сортировки желательно проверить порядок, в котором грани будут выводиться.
A
B
Рис. 9.15. Ошибочное определение расстояния
Предлагается следующий алгоритм этой проверки. Для простоты будем считать, что рассматривается параллельное проектирование вдоль оси z.
Перед выводом очередной грани P следует выполнить следующие проверки в порядке возрастания их сложности:
1.Пересекаются ли проекции этих граней на ось x?
2.Пересекаются ли проекции этих граней на ось y?
3.Пересекаются ли проекции этих граней на ось z?
4.Находятся ли грань P и наблюдатель по разные стороны от плоскости, проходящей через грань Q (рис. 9.16а)?
5.Находятся ли грань Q и наблюдатель по одну сторону от плоскости, проходящей через грань P, (рис. 9.16б)?
Q |
P |
|
Q |
||
|
||
|
P |
а) б)
Рис. 9.16. Взаимное расположение граней и наблюдателя
Если хотя бы один тестов 1-3 дает отрицательный ответ, то проекции граней P и Q на картинную плоскость не пересекаются и, следовательно, порядок, в котором они выводятся, не имеет значения.