glRotatef没有按预期旋转

glRotatef not rotating as expected

本文关键字:旋转 glRotatef      更新时间:2023-10-16

我正试图围绕其中心旋转一个四边形,但是当我运行应用程序时,四边形围绕屏幕的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,谢谢你的帮助和指导我通过它。我必须在glRotatef之前调用glTranslatef因为它仍然想绕(0,0)旋转。再次感谢!

您需要先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);