【问题标题】:Android OpenGL ES distorted imageAndroid OpenGL ES 扭曲图像
【发布时间】:2012-01-12 23:30:20
【问题描述】:

我正在开发一个使用OpenGL 在草地上渲染3D 球的Android 应用程序。用户可以与球交互(通过触摸旋转它)。

问题如下:在我的三星 Galaxy S2 上一切正常,但是当我在其他设备上尝试时(HTC 令人难以置信的 S、HTC 感觉……)我得到一个扭曲的图像,屏幕上有多个裁剪的视口(见attached image)。

我已经尝试了所有我能想到的方法:禁用纹理、禁用灯光等等……似乎没有任何效果。

我知道如果没有实际代码很难提供帮助,但我真的不知道是代码的哪一部分导致了这种情况。所以我问是否有人知道可能导致此问题的原因。

我的猜测与 GLSurfaceView 或 Renderer 子类或这些对象的创建顺序有关...

查看附件图片,如果您知道问题所在,请告诉我。

编辑: onSurfaceCreated 代码:

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
  gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
  gl.glShadeModel(GL10.GL_SMOOTH);
  gl.glClearDepthf(1.0f);
  gl.glEnable(GL10.GL_DEPTH_TEST);
  gl.glDepthFunc(GL10.GL_LEQUAL);
  gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
  gl.glEnable(GL10.GL_TEXTURE_2D);
  gl.glEnable(GL10.GL_NORMALIZE);
}

【问题讨论】:

  • 您使用的是哪个版本的 Galaxy S2?根据维基百科,有不同的模型使用不同的 GPU。
  • 型号:GT-I9100 但我也在 Galaxy Notes 上测试过,效果也很好

标签: android opengl-es


【解决方案1】:

我的朋友。我过去也遇到过同样的问题,这是由于 GPU 支持的深度位数。例如,在我的 Galaxy 上,它支持 24 位深度缓冲区,而在 tegra2 设备上,如果我记得清楚的话,它只有 16 位。无论如何,解决方案是在 egl config 选择功能期间,您必须相应地对其进行配置。

尝试发布 th egl 配置的代码,以便我可以凝胶你。

附:欢迎登机:)

【讨论】:

  • 好的...你找到了!!我在这上面浪费了 1 周时间。非常感谢你刚刚救了我的命。
  • 很高兴能帮上忙。抱歉打错了,但我昨天晚上睡觉时用手持设备写了初步回复:)
【解决方案2】:

要添加 Maurizio 的答案,您可以在 GLSurfaceView 上设置 EGL 配置:

mGLSurfaceView.setEGLConfigChooser(redSize, greenSize, blueSize, alphaSize, depthSize, stencilSize);
mGLSurfaceView.getHolder().setFormat(PixelFormat);

您可以阅读更多here。请注意,正如您所经历的那样,这可能会对不同的图形芯片产生非常糟糕的影响。从扭曲的图像到没有明显原因的非常糟糕的性能。

【讨论】:

    猜你喜欢
    • 2012-05-24
    • 1970-01-01
    • 2013-03-24
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多