Android OpenGL ES扭曲图像

时间:2012-01-10 17:08:17

标签: android opengl-es

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

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

我已经尝试了我能想到的一切:禁用纹理,禁用灯光......等似乎没有任何效果。

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

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

看一下附图,如果您知道问题是什么,请告诉我。

enter image description here

编辑: 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);
}

2 个答案:

答案 0 :(得分:4)

我的朋友。我在过去遇到过同样的问题,这是由于gpu支持的深度位数。例如在我的银河系上,它支持24位深度缓冲,而在tegra2设备上只有16位,如果我记得很清楚的话。无论如何,sokution是在egl config选择函数期间,你必须相应地配置它。

尝试发布egl config的代码,这样我就能凝聚你。

P.S。欢迎乘坐:))

答案 1 :(得分:2)

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

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

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