- •1. Векторные дисплеи.
- •2. Растровые дисплеи.
- •Программистская модель интерактивной графики
- •Лекция 2
- •640X480
- •Лекция 4. Анимация
- •Лекция 7. Алгоритмы растровой графики. Растровая графика.
- •Лекция 9
- •Перспективные проекции
- •15.1. Введение
- •15.2. Упрощение сравнений по глубине: перспективное преобразование
- •15.3. Исключение сравнений по глубине. Оболочки
- •15.4. Алгоритм сортировки по глубине
- •15.5. Алгоритм, использующий z-буфер
- •15.6. Алгоритмы построчного сканирования
- •15.7. Алгоритмы разбиения области
- •15.8. Эффективность алгоритма
- •15.9. Алгоритмы для криволинейных поверхностей
- •Введение в OpenGl
- •Void glVertex[2 3 4][s I f d] (type coords)
- •Void glVertex[2 3 4][s I f d]V (type *coords)
- •Gl_points каждая вершина задает координаты некоторой точки. Gl_lines каждая отдельная пара вершин определяет отрезок; ес-ли задано нечетное число вершин, то последняя вершина игнорируется.
- •Gl_polygon последовательно задаются вершины выпуклог многоугольника.
- •OpenGl в Delphi
- •Событие. Сообщение. Контекст.
15.1. Введение
Предположим, что заданы трехмерный объем и видовые параметры, описывающие тип проекции, проекционную плоскость и т. д., и требуется определить, какие ребра и поверхности объекта видимы, если смотреть из центра проекции (для центральных проекций) или вдоль направления проецирования (для параллельных проекций). Только эти ребра и поверхности мы будем выводить на экран. Хотя задача формулируется просто, для ее решения требуется много процессорного времени, поэтому поощряются разработки многочисленных и тщательно структурированных алгоритмов.
Необходимость этих разработок следует из анализа двух основных подходов к решению проблемы. В первом подходе объект рассматривается как совокупность п-угольных граней и необходимо определить, какая грань видна в каждой точке разрешения экрана дисплея. Чтобы выяснить при этом, какая из граней является ближайшей к наблюдателю, необходимо проверить все п граней для каждой разрешаемой точки. Для N таких точек число проверок пропорционально nN, где N обычно лежит в диапазоне 250 000— 4 000 000.
Во втором подходе каждая из п граней сравнивается с оставшимися п—1 гранями. Число проверок в этом случае пропорционально п2. Поэтому можно предположить, что второй подход лучше даже для наибольших из реально встречающихся значений п (100000—200000). Однако каждый из индивидуальных шагов при втором подходе требует больше времени, поэтому этот процесс окажется медленнее даже при меньших п.
Сазерленд, Спрулл и Шумахер [454] назвали эти подходы алгоритмами, работающими соответственно в пространстве изображения и в пространстве объекта. Они рассмотрели и классифицировали десять алгоритмов, разработанных до 1972 г. Ниже описаны четыре из них, а также некоторые другие алгоритмы, созданные после 1972 г.
Алгоритмы удаления скрытых поверхностей необходимо строить так, чтобы каждый их шаг был как можно более эффективным. В двух следующих разделах приведены некоторые общие рекомендации. Затем изложены специализированные алгоритмы, которые позволяют стирать скрытые поверхности на изображениях трехмерных объектов, составленных из полигональных граней. Некоторые из этих алгоритмов можно использовать для удаления скрытых ребер. Кратко описаны алгоритмы, которые предназначены для изображения объектов, заданных кусками криволинейной поверхности. Класс специализированных алгоритмов, предназначенных : для отображения однозначных функций двух переменных [68, 514], здесь не рассматривается.
15.2. Упрощение сравнений по глубине: перспективное преобразование
Удаление скрытых поверхностей должно проводиться в трехмерном пространстве до проецирования на плоскость, при котором теряется информация о третьей координате, необходимая для про-
Цведения сравнений по глубине.
SpQcHOBHoe сравнение по глубине |можно свести к следующему во-
рпросу: закрывает ли одна из двух ^заданных точек pi=(*i, (/i, 2i) и
?Ра= (х2, г/2, г2) другую? Этот вопрос
^эквивалентен следующему: лежат Г Ли точки Рг и Р2 на одном и том -же проекторе (рис. 15.1)? Если да,
fto, сравнивая 2j и г2, можно опреде-
Щлить, какая точка ближе к наблю-
ЙДателю. Если же нет, то ни одна
Щнз точек не закрывает другую.
Сравнения по глубине обычно производятся после применения
Л нормирующего преобразования (гл. 8), поэтому при параллельном
"проецировании проекторы параллельны оси z, a при центральном проецировании выходят из начала координат. Следовательно, при параллельном проецировании точки лежат на одном проекторе, если xi=kz и </i=J/2, а при центральном проецировании для определения принадлежности точек проектору приходится выполнять четыре операции деления, чтобы выяснить, имеют ли место равенства xl/zl=x2/2z и г/1/21=г/2/22. Более того, если точка Р^ затем сравнивается с некоторой точкой Р3, две из этих операций придется повторить.
Лишних операций деления можно избежать, если произвести такое преобразование трехмерного объекта, при котором параллельная проекция преобразованного объекта представляла бы то же самое, что и центральная проекция первоначального объекта. Тогда проверка, закрывает ли одна из точек другую, будет такой же, как и для параллельных проекций. Преобразование деформирует объекты и перемещает центр проекции в бесконечность вдоль отрицательного направления оси г; при этом проекторы оказываются параллельными (рис. 8.40).
На рис. 15.2 показано, как искажается куб после преобразования, которое состоит в том, что сохраняются относительная глубина, прямые линии и плоскости и в то же время производится перспективное укорачивание. Как было показано в гл. 8, деление, с помощью которого выполняется укорачивание, производится не при всяком сравнении двух точек, а лишь один раз для каждой точки. Матрица
преобразует нормированный видимый объем при центральной проекции в прямоугольный параллелепипед, который определяется следующими
соотношениями:
Отсечение, однако, не может проводиться относительно прямоугольного параллелепипеда, описываемого уравнениями (15.2), так как деление на г, выполняемое в матрице М для формирования параллелепипеда, приводит к потере информации, необходимой для определения знака г-координаты точки (гл. 8). Отсечение относительно нормированного видимого объема, представляющего собой усеченную пирамиду, можно выполнять до применения матрицы М, однако после этого результаты отсечения надо умножить на матрицу М. Более привлекательным решением является объединение матрицы М с перспективным нормирующим преобразованием Мцевтр (гл. 8) так, чтобы можно было обойтись лишь одним умножением на матрицу. Отсечение проводилось бы затем в однородных координатах до выполнения деления. Если результаты этого умножения обозначить через
(X, Y, Z, W), отсекающие пределы можно записать так:
Их можно получить из неравенств (15.2) заменой х, у и г на X/W, Y/W и Z/W соответственно, чтобы отразить тот факт, что х, у и г из неравенств (15.2) являются результатами деления на W. После проведения отсечения мы результат делим на W и получаем (хр, ур, Zp). (В работе [43] рассматривается процесс отсечения для случая, когда знаки W крайних точек отрезка различны.)
Теперь мы можем приступить к удалению скрытых поверхностей, забыв о тех осложнениях, которые продемонстрированы на рис. 15.1. Разумеется, если задано параллельное проецирование, перспективное преобразование матрицы М не требуется, поскольку в этом случае при нормирующем преобразовании Nmf для параллельных проекций проекторы оказываются параллельными оси г„.