gpt4 book ai didi

java - 如何在OpenGL中移动2D相机

转载 作者:行者123 更新时间:2023-12-01 12:14:19 25 4
gpt4 key购买 nike

我是 OpenGL 新手,我正在制作 2D 游戏,我希望相机跟随角色。

我从 gluLookAt() 开始,但我读到我可以用 glTranslatef() 移动矩阵,它应该可以解决问题。

问题是相机仅在第一次创建时移动,但如果我增加 X 位置和 Y 位置,它就不起作用。我做错了什么?我的概念有误吗?

我尝试将其更改为 GL_PROJECTION、GL_MODELVIEW 和 GL_TEXTURE,

如果我在 GL_PROJECTION 上执行此操作,所有项目都会消失(感谢问题解答链接,我知道我不能这样做)

如果我在 GL_TEXTURE 上执行此操作,所有纹理都会开始滚动(但这不是我想要的

如果我在 GL_MODELVIEW 上执行此操作,则不会发生任何情况,所有项目都在同一站点中,但如果我退出 translatef 上方的 gl.glMatrixMode(GL10.GL_MODELVIEW) 行,它会在第一次迭代时移动相机,然后停止执行此操作,因为最后一个对象位于 GL10.GL_MODELVIEW 上

一开始处于不同的矩阵状态吗?这就是初始值 X = 0 和 Y = 0 的情况 enter image description here

这就是初始值 X = -2 和 Y = -2 和 ELIMINATING gl.glMatrixMode(GL10.GL_MODELVIEW) 的情况(如果我不消除这条线,即使值是第一条线 - 2)

enter image description here

在这两种情况下,相机都不会移动,只是停留在该位置

我的渲染代码:

@Override
public void onDrawFrame(GL10 gl)
{
loopStart = System.currentTimeMillis();
try
{
if (loopRunTime < SEngine.GAME_THREAD_FPS_SLEEP)
{
Thread.sleep(SEngine.GAME_THREAD_FPS_SLEEP - loopRunTime);
}
} catch (InterruptedException e)
{
}
deltaTime = (float) ((System.currentTimeMillis() - aRestar)/1000f);


gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glClearColor((78.0f / 255.0f), (192.0f / 255.0f), (203.0f / 255.0f), 0.0f);

gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glTranslatef(x, y, 0f);

perro.move(gl);
moversetas(gl);
palmera.draw(gl);




comprobacionesColision();
actualizar(deltaTime);

x +=0.05f;
y +=0.05f;

loopEnd = System.currentTimeMillis();
loopRunTime = ((loopEnd - loopStart));

}

最佳答案

好吧,经过多次尝试,我做到了,但我不知道这是否是实现这一目标的最佳方法,如果有人可以解释为什么这是一个解决方案,那就太好了!

我只是将矩阵模式更改为GL_PROJECTION并翻译它

gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthof(0f, 8f, 0f, 4f, -1f, 1f);
gl.glTranslatef(x, y, 0f);

而不是

gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glTranslatef(x, y, 0f);

关于java - 如何在OpenGL中移动2D相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27104922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com