2010-10-28 2 views
1

Может кто-нибудь объяснить, что происходит в следующем примере:OpenGL Transformation Проблема

glMatrixMode(GL_MODELVIEW); 
glPushMatrix(); 
glLoadIdentity(); 
glRotatef(45,0,0,1); 
DrawCube(); 
glTranslatef(4,0,0); 
glRotatef(-45,0,0,1); 
DrawCube(); 
glPopMatrix(); 

я предполагаю, что это будет просто повернуть квадрат, сдвинуть его вправо 4 единицы, а затем повернуть его обратно в исходное вращение , Кажется, слишком легко, есть ли что-то, что мне не хватает?

ответ

0

Roughly-

  • Убедитесь, что OpenGL применяет матричные операции в стек
  • видовой
  • Сохранить текущее значение стека (будет отменена по популярности позже)
  • нагрузки личность, очищая любой и все вращается/преобразуются/все
  • Поверните преобразование текущей матрицы на 45 градусов вокруг оси X
  • Нарисуйте куб (используя текущее преобразование матрицы, которое было вращено ред)
  • Перевести текущую матрицу преобразования 4 единицы по оси X
  • Поворота текущей матрицы преобразование -45 градусов вокруг оси х
  • Draw другого куб, который был переведен и поворот от положения точки первый куб
  • Восстановление исходная матрица преобразования, которая была спасена Пуш

в результате два куба втягивается. Первый находится в центре и повернут на 45 градусов, а второй на 4 единицы находится на оси , повернув осью и сам повернувшись на -45 градусов.

+0

Являются ли сверху и снизу каждого квадрата, падающего на ту же ось х? Или один выше другого? – sudo

+0

Я был не очень ясен. Нет, они не были бы на одной оси. Перед этим выполняется поворот, поэтому ориентация оси x изменилась. – luke

+0

Спасибо, я понимаю, поэтому он рисует его чуть выше оригинала. – sudo