OpenGL未能正确使用glTranslate和glRotate

OpenGL未能正确使用glTranslate和glRotate,opengl,2d,lwjgl,slick2d,Opengl,2d,Lwjgl,Slick2d,我正在做一个小游戏,但是OpenGL有一个小问题。当我翻译相机,旋转播放器的图像,希望它看起来会一样,除了有一个轻微的标题纹理都坏了。在下面的示例中,当我向上移动时,相机会向上移动,但播放器会根据纹理面对的位置向上移动(在下面的示例中,纹理会移动50度)。出了什么问题?这是怎么发生的 这是我的密码: glTranslatef(x, y, 0.0f); drawMap(); //You don't see the map in the picture glRotatef(50.0f, 0.

我正在做一个小游戏,但是OpenGL有一个小问题。当我翻译相机,旋转播放器的图像,希望它看起来会一样,除了有一个轻微的标题纹理都坏了。在下面的示例中,当我向上移动时,相机会向上移动,但播放器会根据纹理面对的位置向上移动(在下面的示例中,纹理会移动50度)。出了什么问题?这是怎么发生的

这是我的密码:

 glTranslatef(x, y, 0.0f);
 drawMap(); //You don't see the map in the picture
 glRotatef(50.0f, 0.0f, 0.0f, 1.0f);
 drawPlayer();

谢谢

OpenGL使用MatrixStack作为modelview矩阵,将对象转换为摄影机空间

因此,如果在不恢复堆栈的情况下进行平移,平移也将应用于播放器,旋转将仅应用于播放器。如果您不希望应用转换,请使用
glPushMatrix()
重置堆栈,这意味着您以前使用过
glPushMatrix()
,否则会出现一系列错误

我建议您首先阅读有关modelview矩阵的内容,以及如何使用矩阵平移/旋转/缩放对象

如果要恢复矩阵,可以执行以下操作
glPushMatrix()
将当前状态推送到堆栈,然后
glPopMatrix()
以恢复上次使用的状态。 堆栈总是在最后被清除,因此您必须像调用glPushMatrix()一样频繁地调用glPopMatrix(),否则将出现错误

关于OpenGL背后的线性代数以及如何将其与OpenGL的内置方法一起使用,有很多非常好的教程。[1] 这里被接受的答案是关于数学的非常好[2]

[1] [2]