为什么这个OpenGL轮换也会翻译我的对象?

时间:2014-03-18 14:26:52

标签: c++ c opengl rotation translate-animation

我正在尝试旋转一个对象(箭头),该对象的默认位置指向右侧。我一直在环顾四周,我正在使用glLoadIdentity()和glPushMatrix()以及glPopMatrix()作为仅在我的glBegin函数中旋转对象而不是整个场景的方法:

glLoadIdentity();
glPushMatrix();
glRotatef(5, 0.0f, 0.0f, 1.0f);
glBegin(GL_TRIANGLE_FAN);
    glColor3f(1.0f, 0.0f, 1.0f);
    glVertex2f(xx2-0.01, yy2);
    glVertex2f(xx2-0.06, yy2+0.03);
    glVertex2f(xx2-0.06, yy2-0.03);
glEnd();
glPopMatrix();

然而,它也会翻译我的箭头,而不是只旋转它。我是否需要将偏移量转换回原始位置?或者我做错了什么?

解决:

glLoadIdentity();
glPushMatrix();
glTranslatef(xx2, yy2, 0);
glRotatef(45, 0.0f, 0.0f, 1.0f);
glTranslatef(-xx2, -yy2, 0);
glBegin(GL_TRIANGLE_FAN);
    glColor3f(1.0f, 0.0f, 1.0f);
    glVertex2f(xx2-0.01, yy2);
    glVertex2f(xx2-0.06, yy2+0.03);
    glVertex2f(xx2-0.06, yy2-0.03);
glEnd();
glPopMatrix();

需要转换回中心(0,0,0),应用旋转然后回到它的原始位置(xx2,yy2,0)

2 个答案:

答案 0 :(得分:5)

所有旋转都在原点附近。

所以是的,如果你想围绕其他点旋转,你必须从那个点转换到原点,旋转,然后再转换回来。

答案 1 :(得分:0)

您的代码是正确的,但您无法正常应用您的操作。具体来说,您需要先应用轮换,然后应用翻译。