2.12. Методы создания перспективных видов
Предложенные в предыдущем разделе виды перспективной проекции были неинформативны, так как во всех случаях из каждого центра проекции была видна только одна грань куба. Для того чтобы наблюдатель воспринял трехмерную форму объекта на основании только одного вида, надо, чтобы были видны несколько граней этого объекта. Для простых объектов, подобных кубу, должны быть видны как минимум три грани. Вид с несколькими гранями можно получить из одноточечной перспективной проекции с фиксированным центром и с плоскостью проецирования перпендикулярной направлению взгляда, если предварительно выполнен перенос и/или поворот объекта. Тогда получается реалистический вид, если только цент проекции не находится слишком близко к объекту.
Для начала рассмотрим простой перенос объекта с последующим одноточечныи проецированием на порскость z = 0 и с центром проекции в точке z = zc. Требуемое преобразование записывается в виде
[T] = [Trxyz][Prz] = |
|
|
= |
|
= |
|
|||||||||||||||||||||||||||||||||||||
где r = -1/zc.
Это уравнение показывает, что перенос открывает дополнительные грани объекта. Перенос необходим, чтобы открыть три грани простого кубообразного объекта. На рис. 2.11 показаны результаты перемещения объекта во всех трех направлениях. Здесь куб перемещается вдоль трехмерной прямой от -х = -y = -z к x = y = z. Заметно очевидное увеличение размера, а также на всех видах заметно сохранение истинной формы, но не размера передней грани.
Несколько граней также будет видно, если использовать вращение объекта. Один поворот откроет по крайней мере две грани объекта, тогда как два и более поворотов вокруг разных осей откроют, как минимум, три грани.
Матрица преобразования для поворота вокруг оси y на угол φ и последующего одноточечного перспективного проецирования на плоскость z = 0 с центром проекции z = zc:
[T] = [Ry][Prz] = |
|
|
= |
|
||||||||||||||||||||||||||||
Аналогичным образом матрица преобразования для поворота вокруг оси х на угол θ и последующего одноточечного перспективного проецирования на плоскость z = 0 с центром проекции в точке z = zс имеет вид:
[T] = [Rx][Prz] = |
|
|
= |
|
||||||||||||||||||||||||||||
В обоих уравнениях не равны нулю дна отвечающих за перспективное преобразование элемента в четвертом столбце матрицы преобразования. Таким образом один поворот вокруг главной оси, перпендикулярной той оси, на которой лежит центр проекции, эквивалентен двуточечному перспективному преобразованию (рис. 2.12). При повороте вокруг оси, на которой лежит центр проекции, такого эффекта нет. Заметим, что для одного поворота перспективный элемент для оси вращения остается неизменным, например, в двух предыдущих уравнениях элементы p и q соответственно равны нулю.
Аналогичным образом трехточечное перспективное преобразование выполняется с помощью вращения вокруг двух или более главных осей и последующего одноточечного перспективного преобразования. Например, поворот вокруг оси y, потом поворот вокруг оси х и перспективное проецирование на плоскость z = 0 с центром проекции в точке z = zс имеет следующую матрицу преобразования
[T] = [RyRx][Prz] = |
|
|
|
= |
|
||||||||||||||||||||||||||||||||||||||
Отметим три ненулевых перспективных элемента. Объект можно также переместить, если перемещение происходит после вращения, тогда результирующая матрица преобразования равна
[T] = [Ry][Rx][Tr][Prz] = |
| |||||||||
Отметим здесь очевидный масштабирующий эффект перемещения вдоль z (рис.2.13). Результаты преобразования будут различными, если поменять порядок выполнения поворотов или перенос выполнять до вращения.
Из этих результатов становится ясно, что одно-, дву- или трехточечное перспективное преобразование можно сконструировать с помощью поворотов и и переносов вокруг и вдоль главных осей с последующим одноточечным перспективным преобразованием с центром проекции, расположенным на одной из главных осей. Эти результаты также справедливы для поворота вокруг произвольной оси в пространстве.