Вращение OpenGL вокруг оси Z - PullRequest
       10

Вращение OpenGL вокруг оси Z

0 голосов
/ 05 декабря 2010

Поворот вокруг оси Z на 45 градусов: glRotatef(45.0,0.0,0.0,1.0); Нужно ли переводить для поворота вокруг оси Z на 45 градусов вокруг точки (10,0, -5,0,0,0)?

1 Ответ

1 голос
/ 13 февраля 2012

Особенность функции glRotatef () заключается в том, что она может вращаться только вокруг начала координат.Таким образом, для вращения вокруг определенной точки необходимо перевести эту точку в начало координат, выполнить вращение и перевести обратно.Итак, для вашей точки (10, -5, 0) вы должны сделать:

glPushMatrix(); // you do this to avoid disturbing the transformation matrices for any code following the below lines

glTranslatef(-10, +5, 0); // translate so that (10, -5, 0) lies at the origin
glRotatef(45, 0, 0, 1); // now rotate
glTranslatef(10, -5, 0); // translate back

// now you have rotated the scene by 45 degrees arround z-axis, at point (10, -5, 0)

// (draw your object *here*)

glPopMatrix(); // the old matrix is back

// now it is as if nothing happened

Матрица push / pop часто неправильно понимается, поэтому я привел пример.В новом OpenGL нет неявного стека матриц, поэтому нужно управлять его матрицами вручную.Это становится немного сложнее, но в ответ нет путаницы.

...