为什么这个OpenGL旋转也会翻译我的对象

Why does this OpenGL rotation also translate my object?

本文关键字:翻译 我的 对象 旋转 OpenGL 为什么      更新时间:2023-10-16

我试图旋转一个对象(一个箭头),它的默认位置指向右边。我一直在寻找周围,我使用glloadiidentity()和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)

所有的旋转都围绕原点。

是的,如果你想绕其他点旋转,你必须从那个点平移到原点,旋转,然后再平移回来

您的代码是正确的,但是您的操作顺序乱了。具体来说,您需要先应用旋转,然后应用平移。