我正在尝试围绕其中心旋转四边形,但是当我运行应用程序时,四边形旋转屏幕的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位置旋转。再次感谢!
答案 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);