2.11. Перспективные преобразования

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

Одноточечное перспективное преобразование задается равенством

[x  y  z  1]  1   0   0   0
0   1   0   0
0   0   1   r
0   0   0   1
 = [x  y  z  rz+1]

Здесь h = rz + 1 <> 1. Обычные координаты получаются делением на h:

[x*  y*  z*  1] =  x

rz+1
    y

rz+1
    z

rz+1
    1

Перспективное проецирование на некоторую двумерную видовую плоскость можно получить, объединив ортографическую проекцию с перспективным преобразованием. Например, перспективное проецирование на плоскость z = 0 выполняется с помощью преобразований

[T] = [Pr][Pz] =  1   0   0   0
0   1   0   0
0   0   1   r
0   0   0   1
  1   0   0   0
0   1   0   0
0   0   0   0
0   0   0   1
 =  1   0   0   0
0   1   0   0
0   0   0   r
0   0   0   1

и

[x  y  z  1]  1   0   0   0
0   1   0   0
0   0   0   r
0   0   0   1
 = [x  y  0  rz+1]

Обычные координаты равны

[x*  y*  z*  1] =  x

rz+1
    y

rz+1
    0     1

Чтобы лучше понять действие перспективного преобразования, рассмотрим рис. 2.6. На нем показано перспективное проецирование на плоскость z = 0 резка AB, параллельного оси z, в отрезок А*В* на плоскости z = 0 с центром проекции, расположенным в точке -1/z на оси z. Преобразование можно разделить на два этапа. На первом этапе отрезок АВ отображается в отрезок A'B'. Затем с помощью ортографического проецирования отрезок A'B' в трехмерном пространстве отображается в отрезок А*В* на плоскости z = 0. Центр проекции расположен в бесконечности.

Исследование рис. 2.6 показывает, что прямые А'В' и АВ пересекают плоскость z = 0 в одной и той же точке. Прямая А'В' также пересекает ось z в точке z = 1/r. Далее, перспективное преобразование отображает расположенную в бесконечности точку пересечения параллельных прямых АВ и оси z в конечную точку z = 1/r на оси z. Эта точка называется точкой схода (см. раздел 2.13). Заметим, что точка схода лежит на том же расстоянии от плоскости проекции, что и центр проекции только с противоположной стороны от плоскости, например, если z = 0 есть плоскость проекции, а центр проекции находится в z = -1/r, тогда точка схода находится в z = 1/r.

Прежде чем перейти к примерам, для полноты изложения укажем одноточечные перспективные преобразования с центром проекции и точкой схода, расположенными на осях х и y. Одноточечное перспективное преобразование

[x  y  z  1]  1   0   0   p
0   1   0   0
0   0   1   0
0   0   0   1
 = [x  y  z  px+1]

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

[x*  y*  z*  1] =  x

px+1
    y

px+1
    z

px+1
    1

имеет центр проекции [-1/р  0  0  1] и точку схода, расположенную на оси x в [1/p  0  0  1].

Одноточечное перспективное преобразование

[x  y  z  1]  1   0   0   0
0   1   0   q
0   0   1   0
0   0   0   1
 = [x  y  z  qy+1]

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

[x*  y*  z*  1] =  x

qy+1
    y

qy+1
    z

qy+1
    1

имеет центр проекции [0  -1/q  0  1] и точку схода, расположенную на оси y в [0  1/q  0  1].

Пример 2.4. Одноточечное перспективное преобразование куба.
Выполним перспективное проецирование на плоскость z = 0 единичного куба, изображенного на рис. 2.7,а, с центром проекции в точке zс = 10 на оси z.

Одноточечный перспективный множитель r равен

r = -1/zс= -1/10 =-0,1

Получаем, что

[T] = 
1
0
0
0
    0
1
0
0
    0
0
0
0
    0
0
-0,1
1

[X*] = [X][T] = 
0
1
1
0
0
1
1
0
    0
0
1
1
0
0
1
1
    1
1
1
1
0
0
0
0
    1
1
1
1
1
1
1
1
 
1
0
0
0
    0
1
0
0
    0
0
0
0
    0
0
-0,1
1
 = 
0
1
1
0
0
1
1
0
    0
0
1
1
0
0
1
1
    0
0
0
0
0
0
0
0
    0,9
0,9
0,9
0,9
1
1
1
1
 = 
0
1,11
1,11
0
0
1
1
0
    0
0
1,11
1,11
0
0
1
1
    0
0
0
0
0
0
0
0
    1
1
1
1
1
1
1
1

Результат изображен на рис. 2.7,b. Отметим, что, поскольку центр проекции находится на положительной оси z, проекция передней грани АВСD куба больше проекции задней грани.

Рис. 2.7,b не передает трехмерности куба. Как показано в следующем примере, более удовлетворительный результат можно получить центрированием куба.

Пример 2.5. Одноточечное перспективное преобразование центрированного куба.
Изображенный на рис, 2.7,а куб может быть центрирован на оси z путем его переноса на -1/2 вдоль направлений х и y. Результирующее преобразование

[T] = [Trxy][Prz] = 
1
0
0
-0,5
    0
1
0
-0,5
    0
0
1
0
    0
0
0
1
 
1
0
0
0
    0
1
0
0
    0
0
0
0
    0
0
-0,1
1
 = 
1
0
0
-0,5
    0
1
0
-0,5
    0
0
1
0
    0
0
-0,1
1

Преобразованные обычные координаты равны

[X*] = [X][T] = 
0
1
1
0
0
1
1
0
    0
0
1
1
0
0
1
1
    1
1
1
1
0
0
0
0
    1
1
1
1
1
1
1
1
 
1
0
0
-0,5
    0
1
0
-0,5
    0
0
1
0
    0
0
-0,1
1
 = 
-0,5
0,5
0,5
-0,5
-0,5
0,5
0,5
-0,5
    -0,5
-0,5
0,5
0,5
-0,5
-0,5
0,5
0,5
    0
0
0
0
0
0
0
0
    0,9
0,9
0,9
0,9
1
1
1
1
 = 
-0,56
0,56
0,56
-0,56
-0,5
0,5
0,5
-0,5
    -0,56
-0,56
0,56
0,56
-0,5
-0,5
0,5
0,5
    0
0
0
0
0
0
0
0
    1
1
1
1
1
1
1
1

Результат изображен на рис. 2.8. Заметим, что ранее параллельные оси z прямые, соединяющие углы передней и задней граней, теперь сходятся к оси z (x = 0, y = 0).

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

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

[x  y  z  1]  1   0   0   p
0   1   0   q
0   0   1   0
0   0   0   1
 = [x  y  z  px+qy+1]

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

[x*  y*  z*  1] =  x

px+qy+1
    y

px+qy+1
    z

px+qy+1
    1

имеет два центра проекции: первый на оси х в точке [-1/р  0  0  1] и второй на оси y в точке [0  -1/q  0  1], и две точки схода: на оси х в точке [1/р  0  0  1] и на оси y в точке [0  1/q  0  1]. Заметим, что двуточечное преобразование можно получить объединением двух одноточечных. Конкретнее,

рq] = [Рр] [Рq] = [Рq] [Рр]

Более подробно двуточечная перспективная проекция рассмотрена в следующем примере.

Пример 2.6. Двуточечные перспективные преобразование.
Снова, рассмотрим единичный куб, описанный в примере 2.4. Построим двуточечную перспективную проекцию этого куба на плоскость z = 0 для центров проекции, находящихся в точках х = -10 и y = -10. А именно,

[T] =  1   0   0   p
0   1   0   q
0   0   1   0
0   0   0   1

Здесь p и q равны

р = -1/(-10) = 0,1,     q = -1/(-10) = 0,1

Преобразованные координаты куба имеют вид:

[X*] = [X][T] 
0
1
1
0
0
1
1
0
    0
0
1
1
0
0
1
1
    1
1
1
1
0
0
0
0
    1
1
1
1
1
1
1
1
 
1
0
0
0
    0
1
0
0
    0
0
0
0
    0,1
0,1
0
1
 = 
0
1
1
0
0
1
1
0
    0
0
1
1
0
0
1
1
    0
0
0
0
0
0
0
0
    1
1,1
1,2
1,1
1
1,1
1,2
1,1
 = 
0
0,909
0,833
0
0
0,909
0,833
0
    0
0
0,833
0,909
0
0
0,833
0,909
    0
0
0
0
0
0
0
0
    1
1
1
1
1
1
1
1

Результаты изображены на рис. 2.9,a. Две точки схода находятся в x = 10 и y = 10.

Центрирование куба на оси z с помощью переноса вдоль х и y на -0.5, аналогичное проделанному в примере 2.5, приведет к следующей общей матрице преобразования

[T] = [Txy][Ppqz] = 
1
0
0
-0,5
    0
1
0
-0,5
    0
0
1
0
    0
0
0
1
 
1
0
0
0
    0
1
0
0
    0
0
0
0
    0,1
0,1
0
1
 = 
1
0
0
-0,5
    0
1
0
-0,5
    0
0
0
0
    0,1
0,1
0
0,9

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

[X*] = [X][T] = 
0
1
1
0
0
1
1
0
    0
0
1
1
0
0
1
1
    1
1
1
1
0
0
0
0
    1
1
1
1
1
1
1
1
 
1
0
0
-0,5
    0
1
0
-0,5
    0
0
0
0
    0,1
0,1
0
0,9
 = 
-0,5
0,5
0,5
-0,5
-0,5
0,5
0,5
-0,5
    -0,5
-0,5
0,5
0,5
-0,5
-0,5
0,5
0,5
    0
0
0
0
0
0
0
0
    0,9
1
1,1
1
0,9
1
1,1
1
 = 
-0,56
0,5
0,46
-0,5
-0,56
0,5
0,46
-0,5
    -0,56
-0,5
0,46
0,5
-0,56
-0,5
0,46
0,5
    0
0
0
0
0
0
0
0
    1
1
1
1
1
1
1
1

Результаты изображены на рис. 2.9,b.

И снова снова полученное изображение не дает адекватного восприятия трехмерной формы объекта. Поэтому обратимся к трехточечным перспективным преобразованиям.

Трехточечная перспектива получается, если не равны нулю три первых элемента четвертого столбца (4х4)-матрицы преобразования. Это трехточечное перспективное преобразование

[x  y  z  1]  1   0   0   p
0   1   0   q
0   0   1   r
0   0   0   1
 = [x  y  z  px+qy+rz+1]

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

[x*  y*  z*  1] =  x

px+qy+rz+1
    y

px+qy+rz+1
    z

px+qy+rz+1
    1

имеет три центра проекции: на оси х в точке [-1/р  0   0  1], на оси y в [0  -1/q  0  1] и на оси z в [0  0   -1/r  1], а также три точки схода: на оси х в [1/р  0   0  1], на оси y в [0  1/q  0  1] и на оси z в [0  0   1/r  1].

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

Пример 2.7. Трехточечное перспективное преобразование.
Для описанного в примере 2.4 куба рассмотрим проекцию на плость z = 0 после применения трехточечного перспективного преобразования. Центры проекции находятся в точках х = -10, y = -10 и z = 10. Точки схода находятся в х = 10, y = 10 и z = -10. Матрица преобразования равна

[T] = 
1
0
0
0
    0
1
0
0
    0
0
0
0
    0,1
0,1
-0,1
1

Преобразованные координаты куба

[X*] = [X][T] = 
0
1
1
0
0
1
1
0
    0
0
1
1
0
0
1
1
    1
1
1
1
0
0
0
0
    1
1
1
1
1
1
1
1
 
1
0
0
0
    0
1
0
0
    0
0
0
0
    0,1
0,1
-0,1
1
 = 
0
1
1
0
0
1
1
0
    0
0
1
1
0
0
1
1
    0
0
0
0
0
0
0
0
    0,9
1
1,1
1
1
1,1
1,2
1,1
 = 
0
1
0,909
0
0
0,909
0,833
0
    0
0
0,909
1
0
0
0,833
0,909
    0
0
0
0
0
0
0
0
    1
1
1
1
1
1
1
1

Результат показан на рис. 2.10.

Назад
Компьютерная графика © 2014 ОСУ ИК Вход