0

这是我的问题:我有一个带有渲染器和东西的 GLSurfaceView。在较旧的 Android 版本上,一切都如我所愿。但在较新的版本(我猜 > 4.X)上,它只显示没有任何位图的黑屏。例如,如果我gl.glClearColor(0.1f, 0.2f, 0.3f, 0.5f);在我的 onSurfaceCreated 方法中使用,它会从黑色变为彩色。所以我认为问题一定是相机看错了方向或什么的,因为背景颜色被绘制了。

由于我对 OpenGL 很陌生,我想问一下 Android 版本和 OpenGL 相机或类似的东西之间是否有任何联系?

很多人说我的 Bitmap-Sizes 必须是 2 的幂,但这并不能解决任何问题。

这是我的渲染器:

    public class GlRenderer implements Renderer {

@Override
public void onDrawFrame(GL10 gl) {

    // clear Screen Buffer
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    // Reset the Modelview Matrix
    gl.glLoadIdentity();

    gl.glTranslatef(0.0f, 0.0f, -5.0f);     // move 5 units INTO the screen
                                            // is the same as moving the camera 5 units away

    updateLogic(gl); 

    drawEverything(gl);
}

@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
    gl.glViewport(0, 0, width, height);
    gl.glMatrixMode(GL10.GL_PROJECTION);                     // or some matrix uniform if using shaders
    gl.glLoadIdentity();
    gl.glOrthof(0, width, height, 0, -1, 1); // this will allow to pass vertices in 'canvas pixel' coordinates
    gl.glMatrixMode(GL10.GL_MODELVIEW);
    gl.glLoadIdentity();
}

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    gl.glDisable(GL10.GL_DITHER);
    gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);

    gl.glEnable(GL10.GL_TEXTURE_2D);            //Enable Texture Mapping ( NEW )
    gl.glShadeModel(GL10.GL_SMOOTH);            //Enable Smooth Shading
    gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);    //Set Background
    gl.glEnable(GL10.GL_BLEND);
    gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); 
}

}

4

1 回答 1

0

不确定这是否是您遇到的问题,但请尝试更改以下行:

gl.Orthof(0, widht, height, 0, -1, 1);

gl.Orthof(0, widht, height, 0, 1, -1);

请注意,近/远值是相反的。有关这种疯狂的描述,请参见this :)

于 2013-09-08T13:22:45.767 回答