我在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);
但是,它没有按预期工作。任何帮助将不胜感激。
答案 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)点旋转。如果您设置了一个新矩阵,它会在您在旧矩阵中的位置创建该矩阵。