OpenGL旋转对象,同时将其保持在屏幕中心

时间:2012-02-01 22:35:19

标签: opengl rotation sdl

我在2D工作,我试图围绕一个对象旋转整个世界(包括对象),并将一个对象保持在屏幕的中心。

这是我当前改造世界的代码,所有渲染都是在之后完成的:

hw和hh是屏幕的半宽和高度。 p是对象坐标。

float hw = 400;
float hh = 300;

float x = hw - p.x;
float y = hh - p.y;

glTranslatef(x, y, 0);
glTranslatef(-hw, -hh, 0);
glRotatef(level->angle, 0, 0, 1);
glTranslatef(hw, hh, 0);

但是,它没有按预期工作。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

尝试使用glPushMatrix()和glPopMatrix()。所以你有:

glTranslatef(x, y, 0);
glPushMatrix();
glTranslatef(-hw, -hh, 0);
glRotatef(level->angle, 0, 0, 1);
glTranslatef(hw, hh, 0);
glPopMatrix();

glPushMatrix()保存当前的Matrix(所有Translates,Rotates等)并设置一个新的Matrix。该矩阵相对于旧矩阵,因此如果您在不推动矩阵的情况下进行平移,则将围绕该矩阵中的(0 | 0)点旋转。如果您设置了一个新矩阵,它会在您在旧矩阵中的位置创建该矩阵。