我是OpenGL的新手,我正在制作2D游戏,我希望相机跟随角色。
我从gluLookAt()开始,但我读到我可以用glTranslatef()移动矩阵,它应该可以解决问题。
问题是相机仅在第一次移动时移动但是如果我增加X位置和Y位置它不起作用。我做错了什么?我的概念不正确?
我尝试将其更改为GL_PROJECTION,GL_MODELVIEW和GL_TEXTURE,
如果我在GL_PROJECTION上执行此操作,所有项目都将消失(感谢问题回答链接,我明白我不能采取这种方式)
如果我在GL_TEXTURE上进行所有纹理开始滚动(但这不是我想要的
如果我在GL_MODELVIEW上执行此操作,那么所有项目都在同一个站点中,但是如果我退出上面的gl.glMatrixMode(GL10.GL_MODELVIEW)行,则不会发生任何事情。它会在第一次迭代时移动相机,然后停止执行此操作最后一个对象是GL10.GL_MODELVIEW
处于不同矩阵状态的开始? 这是初始值为X = 0和Y = 0的情况
这是初始值X = -2和Y = -2并且消除gl.glMatrixMode(GL10.GL_MODELVIEW)的情况(如果我没有消除这一行,它似乎是第一个甚至是值 - 2)
在这两种情况下,相机都不会移动,只是停留在那个位置
我的渲染代码:
@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));
}
答案 0 :(得分:1)
好了经过我做了很多尝试后,Stil我不知道这是否是实现这一目标的最佳方式,如果有人能解释为什么这是一个解决方案就会很好!
我只是将矩阵模式更改为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);
答案 1 :(得分:0)
矩阵很难处理。你对如何使用它有任何了解吗? 此外,0.05f增量非常小,你尝试过更大的步骤吗?你的其余代码对我来说似乎很好。 另外,你在GL_PROJECTION或GL_MODELVIEW吗?看看这个:https://gamedev.stackexchange.com/questions/56512/how-do-i-position-a-2d-camera-in-opengl看看底部答案。