如何在OpenGL中移动2D相机

时间:2014-11-24 12:29:47

标签: java android opengl-es 2d

我是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的情况 enter image description here

这是初始值X = -2和Y = -2并且消除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));

}

2 个答案:

答案 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看看底部答案。