Проблема преобразования OpenGL - PullRequest
1 голос
/ 28 октября 2010

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

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

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

1 Ответ

0 голосов
/ 28 октября 2010

Примерно -

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...