OpenGL. Компьютерная графика. Васильев С.А. - 29 стр.

UptoLike

Составители: 

31
//шаг 1 – устанавливается единичная текущая матрица (оси x0y)
glLoadIdentity();
//шаг 2 – поворачивается система координат x0y на 45°
// против часовой стрелки относительно вектора
//(0,0,1) и занимает новое положение x0y
glRotatef(45,0,0,1);
//шаг 3 – система x0y смещается по оси x на 2 единицы и
// занимает положение x′′0y′′
glTranslatef(2.0f, 0.0f, 0.0f);
//шаг 4 – определяем объект и текущая матрица
// модельно-видового преобразования умножается
// на координаты объекта
glBegin(GL_QUADS);
glVertex3f(–1.0f, 1.0f, 0.0f); // левый верхний угол
glVertex3f( 1.0f, 1.0f, 0.0f); // правый верхний угол
glVertex3f( 1.0f, –1.0f, 0.0f); // правый нижний угол
glVertex3f(–1.0f, –1.0f, 0.0f); // левый нижний угол
glEnd();
Теперь рассмотрим, что произойдет с объектом A, если поменять местами шаг 2 с шагом 3 в при-
веденном выше фрагменте программы? Получим новый код.
// Устанавливается единичная текущая матрица оси x0y glLoadIdentity();
// Система x0y смещается по оси x на 2 единицы и занимает
// положение x0y
glTranslatef(2.0f, 0.0f, 0.0f);
// Поворачивается система координат x0y на 45°
// против часовой стрелки относительно вектора (0,0,1) и
// занимает новое положение x′′0y′′
glRotatef(45,0,0,1);
// Определяем объект и текущая матрица модельно-видового
// преобразования умножается на координаты объекта
glBegin(GL_QUADS);
glVertex3f(-1.0f, 1.0f, 0.0f); // левый верхний угол
glVertex3f( 1.0f, 1.0f, 0.0f); // правый верхний угол
glVertex3f( 1.0f,-1.0f, 0.0f); // правый нижний угол
glVertex3f(-1.0f,-1.0f, 0.0f); // левый нижний угол
glEnd();
Конечный результат такого преобразования будет отличаться предыдущей задачи. Ход преобразо-
ваний можно проанализировать на рисунке 3.
Рис. 3 Пример модельно-видовых преобразований
Если в приведенном примере (рис. 4) рассуждать по геометрическим преобразованиям с точки зре-
2
y
x
y
x
y
x
Y
X
Шаг 1
Шаг 3
0
45°
0
Шаг 2
Шаг 4