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();

谢谢!

4

1 回答 1

2

OpenGL 使用 MatrixStack 作为模型视图矩阵,将对象转换为相机空间。

所以如果你在不恢复堆栈的情况下进行平移,那么平移也会应用到播放器上,而旋转只会应用到播放器上。如果您不希望应用转换,请使用glPushMatrix()您之前使用过的暗示重置您的堆栈glPushMatrix(),否则您将收到一堆错误

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

如果你想恢复矩阵,你可以做一些事情,比如 glPushMatrix()将当前状态推送到堆栈并 glPopMatrix()恢复最后使用的状态。堆栈总是在最后被清除,因此你必须像 glPushMatrix() 一样频繁地调用 glPopMatrix() ,否则你会得到一个错误。

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

[1] http://www.opengl.org/archives/resources/faq/technical/viewing.htm [2] 3D 图形处理 - 如何计算模型视图矩阵

于 2013-06-08T09:08:17.057 回答