wcPt3D fixedPt)

{

/* В обратном порядке задается последовательность

* трансляции-масштабирования-трансляции: */

/* (3) Неподвижная точка возвращается

* в исходное положение: */

glTranslatef (fixedPt.x, fixedPt.у, fixedPt.z); glScalef (sx, sy, sz);

/* (2) Масштабирование относительно начала координат. */ /* (1) Неподвижная точка транслируется в начало

* координат: */

glTranslatef (-fixedPt.x, -fixedPt.у, -fixedPt.z);

}

void displayFcn (void) {

/* Вводится описание объекта. */

/* Задаются процедуры трехмерного преобразования

* наблюдения. */

/* Отображается объект. */

РЕЗЮМЕ

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

Двухмерные преобразования можно выразить матричными операторами 3 на 3, а трехмерные - как матричные операторы 4 на 4, так что последовательность преобразований можно свернуть в одну сложную матрицу. Или, в общем случае, и двух-, и трехмерные преобразования можно представлять матрицами 4 на 4. Матричное представление операций геометрических преобразований эффективно, поскольку оно позволяет сократить вычисления, подействовав сложной матрицей на описание объекта, и получить его преобразованное положение. Чтобы это сделать, координаты выражаются как векторы-столбцы. Такое представление является стандартным в математике, поэтому оно принято в большинстве графических пакетов. Вектор-столбец, содержащий три или четыре элемента, представляет однородные координаты. В геометрических преобразованиях однородному коэффициенту присвоено значение 1.

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


⇐ вернуться назад | | далее ⇒