{
/* Вводится описание объекта. */
/* Вводятся параметры трансляции, поворота и масштабирования. */
/* Задаются процедуры трехмерных преобразований наблюдения. */
/* Матрица matComposite инициализируется как единичная: */ matrix4x4SetIdentity (matComposite);
/* Вызываются процедуры преобразования в порядке
* их применения:
*/
rotate3D (pl, р2, radianAngle);
II Первое преобразование: поворот. scale3D (sx, sy, sz, fixedPt);
// Второе преобразование: масштабирование. translate3D (tx, ty, tz);
// Последнее преобразование: трансляция.
/* Вызываются процедуры отображения преобразованных
* объектов.
*/
}
Рис. 5.52. Преобразование координат между правосторонней и левосторонней системами можно выполнить с помощью преобразования отражения (5.114)
ДРУГИЕ ТРЕХМЕРНЫЕ ПРЕОБРАЗОВАНИЯ
Помимо трансляции, поворота и масштабирования во многих трехмерных задачах используются другие преобразования, обсуждавшиеся для двухмерных приложений. В число этих дополнительных преобразований входят отражение, сдвиг и преобразования систем координат.
ТРЕХМЕРНЫЕ ОТРАЖЕНИЯ
Отражение в трехмерном пространстве можно выполнить относительно выбранной оси отражения или относительно плоскости отражения. Вообще, матрицы трехмерного отражения задаются подобно двухмерным матрицам. Отражение относительно данной оси эквивалентно повороту на 180° вокруг этой оси. Отражение относительно плоскости эквивалентно повороту на 180° в четырехмерном пространстве. Если плоскостью отражения является координатная плоскость (ху, хг, ог уг), преобразование можно представлять как переход между левосторонней и правосторонней системами координат (приложение А).
ПЕРЕХОД МЕЖДУ ТРЕХМЕРНЫМИ СИСТЕМАМИ КООРДИНАТ
В разделе 5.8 исследовались операции, требуемые для переноса двухмерного описания сцены из одной системы координат в другую. В пакеты компьютерной графики внедрены преобразования систем координат, позволяющие строить (моделировать) сцены и реализовать процедуры, необходимые в двух- и трехмерных приложениях. Как отмечалось в разделе 5.8, матрица преобразования, переводящая двухмерное описание сцены из одной системы координат в другую, строится с помощью операций, совмещающих оси двух систем. Те же процедуры используются и в трехмерных преобразованиях сцен.
АФФИННЫЕ ПРЕОБРАЗОВАНИЯ
Трансляция, поворот, масштабирование, отражение и сдвиг являются аффинными преобразованиями. Любое аффинное преобразование всегда можно выразить как определенную комбинацию названных пяти преобразований. Другой пример аффинных преобразований - преобразование координатных представлений сцены из одной системы координат в другую, поскольку такой переход можно описать как комбинацию трансляции и поворота. Аффинное преобразование включает только трансляцию, поворот и отражение, сохраняет углы и длины, а также параллельные линии. При любом из трех указанных преобразований длины отрезков и угол между любыми двумя линиями сохраняются.
ФУНКЦИИ ГЕОМЕТРИЧЕСКИХ ПРЕОБРАЗОВАНИЙ В OpenGL
Корневая библиотека OpenGL имеет отдельную функцию для каждого из базовых геометрических преобразований, также все преобразования задаются в трех измерениях. Чтобы выполнить трансляцию, вызывается процедура трансляции и задаются компоненты трехмерного вектора трансляции. В функции поворота задается угол и ориентация оси вращения, которая пересекает начало координат. Наконец, функция масштабирования используется для задания трех параметров масштабирования по координатам относительно начала координат. В каждом случае процедура преобразования задает матрицу 4 на 4, которая будет действовать на координаты объектов.