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 элементы двух ортогональных единичных векторов. Если угол мал, расчет поворота можно сократить, используя приближенные значения функций синуса и косинуса. Однако следует помнить, что за большое число поворотов ошибка аппроксимации может накопиться и дать существенное значение.