【问题标题】:OpenGL failing to use glTranslate and glRotate properlyOpenGL 无法正确使用 glTranslate 和 glRotate
【发布时间】:2013-06-08 08:48:00
【问题描述】:

我在这里制作了一个小游戏,但是 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 2d lwjgl slick2d


    【解决方案1】:

    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 Graphics Processing - How to calculate modelview matrix

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多