Android OpenGL ES错误地渲染compex对象

时间:2012-12-03 17:22:16

标签: android opengl-es culling

我正在尝试编写绘制复杂非凸对象的程序。但我有问题 - 有些面孔似乎是透明的。我通过添加部分解决了这个问题 GLES20.glEnable(GLES20.GL_CULL_FACE);

但之后我发现,如果有两个面具有相同的法线方向而另一个位于另一个面后,则它不起作用。在这种情况下,Open GL渲染错误。 我也尝试添加 GLES20.glEnable(GLES20.GL_DEPTH_TEST)

但是我没有达到目的。此外,一半的物体消失了。你能解释一下我在哪里错了吗?

P.S。为了获得对象顶点,我使用了Blender(我将其数据导出到obj文件中)。我也检查了这些数据 - 顶点顺序是正确的(CCW)。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。问题是你没有在configAttribslist中为深度和模板分配缓冲区的大小。因此,即使指定DepthTest,它也不会计算深度。

解决方案:将以下行添加到eglChooseConfig attribs列表中。 EGL10.EGL_DEPTH_SIZE,8, EGL10.EGL_STENCIL_SIZE,8,这为我解决了这个问题。

代码:

private static int[] s_configAttribs2 = { 
   EGL10.EGL_RED_SIZE, 4, 
   EGL10.EGL_GREEN_SIZE, 4, 
   EGL10.EGL_BLUE_SIZE, 4, 
   EGL10.EGL_DEPTH_SIZE, 8, 
   EGL10.EGL_STENCIL_SIZE, 8, 
   EGL10.EGL_SAMPLE_BUFFERS, 1,
   EGL10.EGL_RENDERABLE_TYPE, 
   EGL_OPENGL_ES2_BIT, 
   EGL10.EGL_NONE 

};

egl.eglChooseConfig(display, s_configAttribs2, configs, numConfigs, num_config);