我正在开发一个Android应用程序,它使用OpenGL
在草地上渲染3D球。用户可以与球交互(通过触摸旋转)。
问题如下:一切都在我的三星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);
}
答案 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。请注意,正如您所经历的那样,这会对不同的图形芯片产生非常糟糕的影响。从失真的图像到非常差的表现,没有明显的原因。