logo search
Компьютерная графика / МАШ_ГРАФИКА

§2. Перспективные проекции

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

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

138

матричного умножения переводят в специальные про-межуточные координаты (xп, yп, zп,Н), у которых четвёртая компонента не равна 1. Затем путем нормирования вектора промежуточных координат по четвертой компоненте полу-чают требуемые перспективные однородные координаты точек (x*, y*, z*,1).

Рассмотрим для примера положение центра проецирова-ния Op на оси z в точке с координатами (0,0,-k). Допустим, плоскостью проецирования является плоскость z=0. Выяс-ним для произвольной точки P = (x, y, z), какие координа-ты будет иметь её изображение - точка P* = (x*, y*, z*=0) на плоскости проецирования (Рис.7.2). Рассматривая подоб-ные треугольники ОPOC , ОPAВ и учитывая, что OC =x* , AB = x , получим: ОPO : ОPA =OC : AB; k : (z+k) =x* : x . Отсюда следует: x* = x/(z/k+1) . Рассматривая аналогичные подобные треугольники ОPСР* , ОPВР с учётом ВР = у , СР* = у* , получим такое же выражение для проекции координат по оси у : у* = у/(z/k+1).

Рис.7.2

139

Введем для упрощения записи выражений величину r=1/k. Данное преобразование можно представить в виде последо-вательного выполнения двух.

1. Определение промежуточных координат точек в проективной проекции на плоскость z=0 путём умножения исходных однородных координат на матрицу:

xn 1 0 0 0 x x

yn = 0 1 0 0 * y = y

zn 0 0 0 0 z 0

H 0 0 r 1 1 r* z+1

(7.9)

2. Деление всех промежуточных координат точек на ве-личину Hчетвертую неединичную компоненту промежу-точных координат. В итоге получаются искомые перспек-тивные однородные координаты:

x* =xn /H =x/(r* z+1), y* =yn /H = y/(r* z+1), z* =0. (7.10)

Из (7.10) видно, что в рассмотренном примере преобра-зование координат x, y зависит от того, какое положение точка занимает по оси z. Следовательно, в отличие от аксо-нометрических проекций, у перспективных преобразова-ний изменения координат не являются одинаковыми для всех точек наблюдаемого объекта.

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

xn 1 0 0 0 x x

yn = 0 1 0 0 * y = y

zn 0 0 1 0 z z

H 0 0 r 1 1 r* z+1

(7.11)

с однородными координатами

140

(x*,y*,z*,1) = (xn /(r* z+1), yn /(r* z+1), zn /(r* z+1),1) (7.12).

Начало системы координат (0, 0, 0, 1)снова остается не-изменным, а бесконечно удаленная по осиzточка(0, 0, 1, 0)преобразуется в точку[xn , yn , zn , H] = [0, 0, 1, r]с однородными координатами(x*, y*, z*, 1) = (0, 0, 1/r, 1) на осиz*.Это означает, что положительная полуплоскость(0 ≤ z ≤ ∞)проецируется в ограниченную область(0 ≤ z* ≤ 1/r).Кроме того, линии, которые первоначально были парал-лельны оси, теперь будутпроходить через точку VP = [0, 0, 1/r, 1].Эту точку называют точкой схода перс-пективного преобразования. Плоскость z = 0являетсяпроекционной плоскостью, при этом центр проекцииОР находится на той же самой оси, что и точка схода, на одинаковом расстоянии от противоположной стороны нулевой плоскости. Это иллюстрирует Рис.7.3. Рассмотрим произвольную точкуА=(x,y,z).Координаты ортогональной(A**),плоской(A*)и пространственной(B*)перспективных проекций этой точки будут следующими:

A** =(x,y,0),A*=(x,y,0)/(r* z+1),B*=(x,y,z)/(r* z+1).

Длины отрезков ОА*,ОА**иА*А**можно выразить через координаты исходной точкиА:

Из подобия треугольников ОА**VP иА*А**В* следует справедливость пропорцииОА**/A*A** = OVp/A*B*. Отсюда получим:OVp= A*B* ОА**/A*A** = OVp = 1/r. Постоянное положение точки сходаVp следует из произвольности выбранной точкиА.

141

z

А

у

VP B*

1/r

О А* А**

-1/r

OP x

Рис.7.3.

Аналогично, перспективное преобразование

xn 1 0 0 0 x x

yn = 0 1 0 0 * y = y

zn 0 0 1 0 z z

H 0 q 0 1 1 qy+1

(7.13)

с однородными координатами

142

(x*, y*, z*,1) = ( xn /(q* y+1), yn /(q* y+1), zn /(q* y+1), 1)(7.14)

будет приводить к точке схода на оси ycкоординатами(0, 1/q, 0, 1).

Перспективное преобразование

xn 1 0 0 0 x x

yn = 0 0 1 0 * y = y

zn 0 1 0 0 z z

H p 0 0 1 1 px+1

(7.15)

с однородными координатами

(x*,y*,z*,1) = (xn /(p* x+1),yn /(p* x+1),zn /(p* x+1),1)(7.16)

приводит к точке схода на оси xс координатами(1/p, 0, 0, 1).

Преобразования, заданные уравнениями (7.11)-(7.16) на-зывают одноточечнымиперспективными преобразова-ниями.

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

Двухточечное перспективное преобразование

xn1 0 0 0 x x

yn = 0 1 0 0 * y = y

zn 0 0 1 0 z z

H p q 0 1 1 px+qy+1

(7.17)

с однородными координатами

(x*,y*,z*,1)=(xn /(p*x+q*y+1),yn/(p*x+q*y+1),zn /(p* x+q* y+1),1)

(7.18)

приводит к двум точкам схода: одна расположена на оси x, в точке с координатами(1/p, 0, 0, 1), а другая – на осиy, в точке с координатами(0, 1/q, 0, 1).

Двухточеченые преобразования с точками схода по осям

143

х,zи y, zстроятся аналогично.

Если все три первых элемента 4-ой строки матрицы преобразования ненулевые, то получается трехточечная, иликосаяперспектива.

Трехточечное преобразование cматрицей

1 0 0 0

0 1 0 0

0 0 1 0 (7.19)

p q r 1

с однородными координатами

(x*, y*, z*,1) = (xn /(p* x+q* y+r* z), yn /(p* x+q* y+r* z), zn /(p* x+q* y+r* z), 1) (7.20)

приводит к трем точкам схода: одна на оси xс коор-динатами(1/p ,0, 0, 1), другая на осиy с координатами(0, 1/q, 0, 1) и третья на осиzв точке с координатами(0, 0, 1/r, 1).Трехточечное перспективное изображение единичного куба , у которого начало совпадает с началом системы координат, а оси ориентированы по осям координат, показано на Рис.7.4.

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

Функция Persp на языкеAutolisp, строящая трёхточеченое проективное изображение произвольного объекта, приведена в Приложении.

144

Рис.7.4.

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

145