Основы компьютерной графики для программистов 85
____________________________________________________________________________________________________________________
http://www.ksu.ru/persons/9134.ru.html
расположение мировой и видовой систем координат остается неизменным. Изменяются
только координаты объектов относительно
мировой системы координат. Действие
функций геометрических преобразований при этом следует учитывать в порядке
обратном тому, в котором они записаны в тексте программы.
Во втором случае, мы считаем, что действие функций геометрических преобразований
относится к
видовой системе координат, то есть к осям системы координат
наблюдателя относительно начального положения
видовой же системы координат. В
этом случае мировая система координат остается неподвижной вместе с объектами,
который в ней описаны. Задавая координаты объектов, мы каждый раз переносим
наблюдателя и располагаем
оси его системы координат в соответствии с текущей
матрицей преобразования, которая была задана с помощью функций
glTranslate,
glRotate и glScale. Действие функций геометрических преобразований при этом следует
учитывать в том порядке, в котором они записаны в тексте программы.
Для проверки правильности этих двух правил применим их на примере функции
DrawScene, приведенной выше. Итак, матрица геометрических преобразований
составлена всего из трех действий:
glTranslatef(0,0,-260);//задаем матрицу переноса
glRotatef(AngleX, 0.0, 1.0, 0.0); // поворот вокруг оси Y
glRotatef(AngleY, 1.0, 0.0, 0.0); // поворот вокруг оси X
Прежде чем представлять себе результат действия последовательности этих функций
следует выбрать одно из двух вышеприведенных правил. Пусть, например, это первое
правило, по которому преобразования применяются к координатам вершин объектов в
мировой системе координат. Тогда следует рассматривать команды преобразований (но
не изменять текст программы) в обратном порядке:
glRotatef(AngleY, 1.0, 0.0, 0.0); // поворот вокруг оси X
glRotatef(AngleX, 0.0, 1.0, 0.0); // поворот вокруг оси Y
glTranslatef(0,0,-260);//задаем матрицу переноса
Функции поворота задают вращение объектов относительно начала координат мировой
системы. Оси систем обеих систем координат при этом остаются на своих местах.
Первая команда поворота вращает объекты вокруг оси вращения образованной
вектором (1,0,0), то есть вокруг оси OX мировой системы координат. Положительное
вращение, т.е. поворот на положительный угол, происходит
при повороте против
часовой стрелки, если смотреть из положительной полуоси образованной вектором
вращения (в данном случае из положительной полуоси OX) в направлении начала
координат. Поскольку центры сферы и других объектов совпадают с началом
координат, то объекты пока остаются на своих местах. Третья функция
glTranslatef(0,0,-260) переносит объекты на (–260) единиц по оси Z в мировой системе
координат. Все объекты удаляются от начала координат мировой системы, а значит и
от начала координат видовой системы координат на 260 единиц. Вспомним, что
отрицательное направление оси Z мировой системы координат соответствует
положительному направлению видовой системы координат. Поэтому на экране мы
видим, что объекты
перенесены на (+260) единиц вперед.
Рассмотрим второй вариант, когда преобразуется система координат наблюдателя
относительно мировой системы, а объекты остаются неподвижными. В этом случае
последовательность команд остается той же что и в тексте программы. Первым
действием выполняется перенос начала координат наблюдателя на (-260) единиц по оси