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 для параллельных проекций проекторы оказываются параллельными оси г„.
- 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
- Событие. Сообщение. Контекст.