glRotatef没有按预期旋转

时间:2011-11-14 08:51:26

标签: c++ opengl

我正在尝试围绕其中心旋转四边形,但是当我运行应用程序时,四边形旋转屏幕的0,0位置,我无法解决原因,因为一切看起来都不错。任何帮助将不胜感激。

glPushMatrix();
glTranslatef(pxob->x, pxob->y, 0);

glRotatef(pxob->theta,0.0f,0.0f,1.0f);

glBegin(GL_QUADS);
    glColor3f((28.0f / 255.0f), (28.0f / 255.0f), (28.0f / 255.0f)); 

    glVertex3f(pxob->x - (SIZE / 2), pxob->y- (SIZE / 2), 0);
    glVertex3f(pxob->x + (SIZE / 2), pxob->y- (SIZE / 2), 0);
    glVertex3f(pxob->x + (SIZE / 2), pxob->y + (SIZE / 2), 0);
    glVertex3f(pxob->x- (SIZE / 2), pxob->y + (SIZE / 2), 0);
glEnd();
glPopMatrix();

修改 感谢Krom,感谢您的所有帮助,指导我。我确实必须在glTranslatef之前调用glRotatef,因为它仍然想要围绕0,0位置旋转。再次感谢!

1 个答案:

答案 0 :(得分:3)

您需要先glRotatef,然后glTranslatef

这是因为第一个对象需要乘以旋转矩阵(围绕其中心旋转对象),然后应用平移矩阵(将旋转的对象移动到所需位置)。

如果你这样做,翻译对象的另一个方向将围绕0; 0坐标旋转。

编辑:查看代码 - 使用X / Y偏移构建四边形,而您已将其应用于glTranslatef。那可能是个错误。代码应该是:

glVertex3f(-SIZE / 2, -SIZE / 2, 0);
glVertex3f( SIZE / 2, -SIZE / 2, 0);
glVertex3f( SIZE / 2,  SIZE / 2, 0);
glVertex3f(-SIZE / 2,  SIZE / 2, 0);