Opengl es 在二维游戏OpenGL中改变摄像机位置

Opengl es 在二维游戏OpenGL中改变摄像机位置,opengl-es,2d,glulookat,Opengl Es,2d,Glulookat,我是用OpenGL制作游戏的初学者。我画了一张地图(这是一个世界,玩家可以移动),现在我想做的是,相机跟随玩家(玩家在屏幕中央)。 我做过这样的事情: GLU.gluLookAt(gl, this.x, this.y, 0, this.x, this.y, 1.0f, 0.0f, 0.0f, 0.0f); 其中,x和y是玩家的坐标。不幸的是,它不起作用。 这是2d游戏,因此没有任何预期等。你可以用

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

GLU.gluLookAt(gl, 
                this.x, this.y, 0,
                this.x, this.y, 1.0f,
                0.0f, 0.0f, 0.0f);
其中,x和y是玩家的坐标。不幸的是,它不起作用。
这是2d游戏,因此没有任何预期等。

你可以用几种方法来完成,但最简单的方法可能就是打电话

gl.glTranslatef( cameraX, cameraY );
在glLoadIdentity调用之后但渲染帧之前

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

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



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

你可以用几种方法来做,但最简单的方法可能就是打电话

gl.glTranslatef( cameraX, cameraY );
在glLoadIdentity调用之后但渲染帧之前

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

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



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

你能举个例子吗?在我的情况下,它只移动了第一次:(你能举个例子吗?在我的情况下,它只移动了第一次:(