在openGL中移动相机的问题

时间:2012-11-04 23:07:15

标签: opengl

好的,我想首先说我知道我实际上并没有移动相机,但更容易解释这种方式。

我的问题是我正试图用自上而下的2d RPG中的角色移动相机,我找不到正确的方法来做到这一点。我知道glTranslate()然后我只能使用速度而不是x和y坐标。我不确定如何移动相机记住三角洲。我甚至不知道glTranslate()是否是我应该使用的方法。

如果我没有任何意义(很可能),这是我的一些代码。

我的测试循环:

while(!Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)&&!Display.isCloseRequested())
    {
        glClear(GL11.GL_COLOR_BUFFER_BIT);

        delta=getDelta();
        update(delta);
        glTranslatef(speedx, speedy, 0);

        level1.checkCurrent(x, y);
        level1.draw();
        Display.update();
        Display.sync(60);
    }

这是我设定速度的地方:

    if(Keyboard.isKeyDown(Keyboard.KEY_DOWN))
    {
        y+=0.5*delta;
        screenY+=0.5*delta;
        speedy=(int) (-0.5*delta);
        direction=2;
    }
    else if(Keyboard.isKeyDown(Keyboard.KEY_UP))
    {
        y-=0.5*delta;
        screenY-=0.5*delta;
        speedy=(int) (0.5*delta);
        direction=8;
    }
    else
        speedy=0;

1 个答案:

答案 0 :(得分:1)

现在你正在将OpenGL视为场景图。但OpenGL只是为了在屏幕上绘制内容。无论你做什么,你都应该在某种程度上考虑你的问题,好像所有其他基础设施都没有。

你想加速一个物体?那么,你需要随着时间的推移增加一些速度变量,速度变量乘以时间会增加位置。本质上牛顿的运动定律:

a = dv/dt => v = a*t + v_0
v = dr/dt => r = v*t + r_0 = a*t² + v_0*t + r_0

您可以评估每个对象。然后,当绘制动画时,您可以使用状态相应地放置对象几何体。