2010-12-05 5 views
0

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

+0

для вращения вокруг точки, да, вам также нужно будет перевести. Это зависит от вас, если вы хотите перевести, повернуть свой объект, а затем перевести на то, что не каскадируется через следующее преобразование, или поместить эти два между вызовами glPushMatrix() и glPopMatrix() – 2010-12-05 10:32:22

ответ

1

Дело в том, что функция 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 

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

Смежные вопросы