OpenGL旋转对象,同时保持它在屏幕中心
问题描述:
我在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);
但是,它没有按预期工作。任何帮助将不胜感激。
答
尝试使用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)点。如果您设置了一个新的矩阵,它会在您旧矩阵中的位置创建该矩阵。
如果您只想旋转部分场景,请推入矩阵堆栈,渲染该部分并弹出堆栈?您可能想要显示一些代码实际代码。 – pmr 2012-02-01 23:18:11
也许我不清楚,我想旋转所有东西,包括对象周围的物体,将它保持在屏幕的中心。我可以把它放在屏幕的中心,但是当我旋转时,我无法让它留在那个地方。 – 2012-02-01 23:24:57