在Android GLES 1.0中渲染期间对象正在抖动。

时间:2013-09-02 00:23:45

标签: java android opengl-es

我在游戏引擎中修复bug有点麻烦。

我的问题是,当我在镜头中移动相机时,我看到了我的摇晃元素。 只有当我的相机被手指滑动移动时才会出现错误。 当我在更新方法中更改它的位置时,一切似乎都很好。

渲染方法(在主要活动中从onDrawFrame()调用):

public void drawScene(GL10 gl)
{
    // Clear scene
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
    // Move left top corner of camera to specified point
    gl.glTranslatef(-camera.getX(), screenManager.getScreenHeight() - camera.getY(), 0f);
    // Render all objects from the scene
    root.renderObjects(gl);
    // Fixed position for HUD elements
    gl.glTranslatef(camera.getX(), -screenManager.getScreenHeight() + camera.getY(), 0.0f);
    // Render hud to the screen
    hud.renderObjects(gl);
    // Get back to camera position
    gl.glTranslatef(-camera.getX(), screenManager.getScreenHeight() - camera.getY(), 0.0f);
    // Reset the matrix
    gl.glLoadIdentity();
}

移动方法(在主要活动中从onTouchEvent调用):

public void onPointerMove(TouchPointer pointer, TouchPointer historicalPointer)
{
    Point p = new Point(pointer.getRawTouchPoint());
    p.subtract(historicalPointer.getRawTouchPoint());
    camera.moveBy(p);
}

我认为这是重要的代码。但我没有看到任何可以改变的东西。 如果有人有任何想法,请分享;)

1 个答案:

答案 0 :(得分:1)

我个人会将drawScene更改为

public void drawScene(GL10 gl)
{
    // Clear scene
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
    // Move left top corner of camera to specified point
    gl.glTranslatef(-camera.getX(), screenManager.getScreenHeight() - camera.getY(), 0f);
    // Render all objects from the scene
    root.renderObjects(gl);
    // Fixed position for HUD elements
    gl.glLoadIdentity();
    // Render hud to the screen
    hud.renderObjects(gl);
    gl.glLoadIdentity();
}

看看它是否有帮助。问题可能在于在renderObject期间(例如从外部线程)更改相机位置,或者甚至浮动不够精确。