1)绘制过程开启了GL_CULL_FACE,建模过程中三角形顶点顺序为CW导致绘制无结果。默认是GL_CCW调试方法:修改多边形填充模式GL_LINE确认图形轮廓线是否绘制成功;或者禁掉背面剔除:glDisable(GL_CULL_FACE); 解决方法:glFrontFace( GL_CW / GL_CCW )修改默认配置。 2)关闭深度测试,导致混合失效??http://stackoverflow.com/questions/3773353/opengl-blend-problem 3)深度缓冲区溢出Android GLSurfaceView默认采用16bit的深度缓冲区,精度在0-65536,参见:http://www.linuxidc.com/Linux/2014-03/98791.htm public void setRenderer(Renderer renderer) { checkRenderThreadState(); if (mEGLConfigChooser == null) { // here mEGLConfigChooser = new SimpleEGLConfigChooser(true); } if (mEGLContextFactory == null) { mEGLContextFactory = new DefaultContextFactory(); } if (mEGLWindowSurfaceFactory == null) { mEGLWindowSurfaceFactory = new DefaultWindowSurfaceFactory(); } mGLThread = new GLThread(renderer); mGLThread.start(); }
/** * This class will choose a RGB_565 surface with * or without a depth buffer. * */ private class SimpleEGLConfigChooser extends ComponentSizeChooser { public SimpleEGLConfigChooser(boolean withDepthBuffer) { super(5, 6, 5, 0, withDepthBuffer ? 16 : 0, 0); } }4)android中不同资源目录导致纹理资源被隐式修改:2幂次的纹理放在drawable目录下,在高分屏android机器上从drawable中加载纹理资源后进行1.2倍隐式扩充,导致纹理不再是2的幂次。http://www.linuxidc.com/Linux/2014-03/98793.htm