2012-02-01 59 views
3

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

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

硬件及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

如果您只想旋转部分场景,请推入矩阵堆栈,渲染该部分并弹出堆栈?您可能想要显示一些代码实际代码。 – pmr 2012-02-01 23:18:11

+0

也许我不清楚,我想旋转所有东西,包括对象周围的物体,将它保持在屏幕的中心。我可以把它放在屏幕的中心,但是当我旋转时,我无法让它留在那个地方。 – 2012-02-01 23:24:57

回答

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。该矩阵是相对于旧矩阵的,因此如果在不推动矩阵的情况下进行平移,则将旋转该矩阵中的(0 | 0)点。如果您设置了一个新的矩阵,它会在您旧矩阵中的位置创建该矩阵。