2012-01-10 171 views
3

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

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

我已经尝试了所有我能想到的:禁用纹理,禁用灯等等......没有任何东西可以工作。

我知道没有实际的代码很难提供帮助,但我不知道代码的哪一部分导致了这种情况。所以我问,如果有人有任何想法可能会导致这个问题。

我的猜测是一些有关GLSurfaceView或渲染子类或创建这些对象的顺序...

看看添附图像,让我知道,如果你知道是什么问题。

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); 
} 
+0

您使用的是哪个版本的Galaxy S2?根据维基百科,有不同的模型使用不同的GPU。 – 2012-01-10 19:36:04

+0

型号:GT-I9100 但我还测试了银河注意事项,工作正常以及 – 2012-01-11 07:27:29

回答

4

我的朋友。过去我经历过同样的问题,这是由于GPU支持的深度数。例如在我的银河系中,它支持24位深度缓冲区,而在tegra2设备上只有16位,如果我记得不错的话。无论如何,这个问题是在egl config选择功能的时候,你必须相应地配置它。

试着发布egl配置的代码,这样我就可以为您打造了。

P.s.欢迎加入:)

+0

行...你找到了它!我已经浪费了一周的时间。非常感谢你拯救了我的生命。 – 2012-01-11 08:20:19

+0

很高兴有帮助。对不起,我写了我的手持设备的初步响应,而昨天晚上睡着了:) – 2012-01-11 09:14:59

2

要在莫里吉奥的答案添加,你可以设置你的GLSurfaceView东瀛配置:

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

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

+0

正是我做了什么,它现在工作正常。谢谢! – 2012-01-11 10:59:52