【问题标题】:GLSurfaceView: position of camera, looking at Surface, changes with android version?GLSurfaceView:相机的位置,看着Surface,随着android版本的变化?
【发布时间】:2013-09-08 12:44:24
【问题描述】:

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

由于我对 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); 
}

}

【问题讨论】:

    标签: android opengl-es glsurfaceview


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 它是一个没有深度的 2D 表面,所以这并没有改变任何东西。还是黑屏:(
    • 您提供的其余代码看起来还不错。但是,由于您没有显示任何渲染和/或模型创建代码,因此无法确定还有什么问题。可能是您的清盘顺序,也可能是某处设置的某个状态。
    • 我想我找到了解决方案。将在这里发布
    • 我尝试了很多东西,似乎因为我有 gl.Orthof(0, widht, height, 0, -1, 1);我将不得不删除 gl.glTranslatef(0.0f, 0.0f, -5.0f);我不完全理解这一点,但它有效:)
    • 哦,是的,应该这样做 - 我错过了那个电话;)当你删除它时它起作用的原因是它通过 -5.0f 转换所有坐标(因为你的 onDraw() 调用在模型视图)。这将所有这些都放在了视锥体之外。由于 OpenGL 实际上不是在 2D 中工作,z 维度仍然存在,它通常只是在一个平面上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 2019-07-24
    • 1970-01-01
    相关资源
    最近更新 更多