GLSURFACHEVIEW:相机的位置,观察表面,随android版本的变化?

GLSURFACHEVIEW:相机的位置,观察表面,随android版本的变化?,android,opengl-es,glsurfaceview,Android,Opengl Es,Glsurfaceview,我的问题是: 我有一个GLSURFACHEVIEW与渲染器和东西。在较旧的Android版本上,一切都按照我的要求运行。但在较新的版本(我猜>4.X)上,它只是显示一个没有任何位图的黑屏。例如,如果我使用gl.glClearColor(0.1f、0.2f、0.3f、0.5f)在我的onSurfaceCreated方法中,它从黑色变为颜色。所以我认为问题一定是相机看错了方向或者别的什么,因为背景色被画出来了 因为我是OpenGL的新手,我想问一下Android版本和OpenGL摄像头或类似的东西之

我的问题是: 我有一个GLSURFACHEVIEW与渲染器和东西。在较旧的Android版本上,一切都按照我的要求运行。但在较新的版本(我猜>4.X)上,它只是显示一个没有任何位图的黑屏。例如,如果我使用
gl.glClearColor(0.1f、0.2f、0.3f、0.5f)
在我的onSurfaceCreated方法中,它从黑色变为颜色。所以我认为问题一定是相机看错了方向或者别的什么,因为背景色被画出来了

因为我是OpenGL的新手,我想问一下Android版本和OpenGL摄像头或类似的东西之间是否有任何联系

很多人说我的位图大小必须是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); 
}

}

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

gl.Orthof(0,宽,高,0,-1,1)

gl.Orthof(0,宽,高,0,1,-1)


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

这是一个没有深度的二维曲面,因此这并没有改变任何东西。仍然是黑屏:(您提供的其余代码看起来还可以。但是,由于您没有显示任何渲染和/或模型创建代码,因此无法确定还有什么可能是错误的。可能是您的缠绕顺序,也可能是在某个地方设置的某个状态。我想我找到了解决方案。将在此处发布我尝试了许多方法,而且似乎因为我有gl.Orthof(0,widt,height,0,-1,1);我将不得不删除gl.glTranslatef(0.0f,0.0f,-5.0f);我不完全理解这一点,但它可以工作:)哦,是的,应该可以这样做-我错过了那个调用;)删除它时它工作的原因是它将所有坐标转换为-5.0f(因为您的onDraw()调用在模型视图上运行)因为OpenGL实际上不是在2D中工作,所以z维度仍然存在,它通常只是在一个平面上。