1

我是在 OpenGL 中制作游戏的初学者。我画了一张地图(这是世界,玩家可以移动),现在我想做,那个相机跟随玩家(玩家在屏幕中央)。我做了这样的事情:

GLU.gluLookAt(gl, 
                this.x, this.y, 0,
                this.x, this.y, 1.0f,
                0.0f, 0.0f, 0.0f);

其中 this.x 和 this.y 是玩家的坐标。不幸的是它不起作用:(什么都没有发生。这是 2d 游戏,所以没有任何透视等。

4

1 回答 1

1

你可以通过几种方式做到这一点,但最简单的可能就是打电话

gl.glTranslatef( cameraX, cameraY );

在 glLoadIdentity 调用之后但在渲染框架之前。

glTranslatef 具有累积效果,因此场景中的所有内容都将被 cameraX 和 cameraY 偏移绘制。

一个问题是,要使其工作,您需要使用 glPushMatrix 和 glPopMatrix 而不是在渲染每个对象之前调用 glLoadIdentity ,否则您会丢失相机平移。


顺便说一句,如果您计划拥有一个巨大的世界,您应该将玩家的位置设置为 0,0 并让您的世界移动而不是您的玩家。如果它是一个小游戏,这不是一个大问题,但是当对象具有非常大的 x 和 y 值时,您可能会遇到浮点舍入错误的问题。这可能不是你曾经遇到过的事情,但很高兴知道我猜。

于 2013-01-09T23:32:25.043 回答