2012-12-09 44 views
0

我在iOS上遇到了使用OpenGL ES 2.0的半透明问题。我的场景很简单。它由一个立方体网格组成,其中一些应该显示为固体,而另一些应该呈现半透明。我开始使用下面的代码来设置OpenGL。OpenGL ES 2.0中的半透明

glEnable(GL_CULL_FACE); 
glEnable(GL_DEPTH_TEST); 
glDepthFunc(GL_LEQUAL); 

glEnable (GL_BLEND); 
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

由于深度测试和剔除,这会导致某些角度的透明度不正确。见下面

Correct transparency/Culling and depth testing enabled

Incorrect transparency/Culling and depth testing enabled

我试图禁用冰壶和深度测试和启用阿尔法测试的两个图像。结果是正确的透明度,但没有纹理(见下图)。

//glEnable(GL_CULL_FACE); 
//glEnable(GL_DEPTH_TEST); 
//glDepthFunc(GL_LEQUAL); 


glAlphaFunc(GL_GREATER, 0.5); 
glEnable(GL_ALPHA_TEST); 


glEnable (GL_BLEND); 
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

enter image description here

我使用GLKit加载纹理和GLKBaseEffect渲染场景。是否有人提示如何在第一张图片中获得与所有透视图相同的正确透明度?谢谢:)

回答

3

你的主要有两个选项:

  1. 排序的所有场景中的多边形,并确保没有任何多边形相交的任何其他(因为那时你不能命令他们)

  2. 改为使用与排序无关的混合模式,例如添加剂或减法混合。

如果你确实只想立方体的网格,改变呈现,以适合任何角度来看应该不会太棘手,因为你只需要遍历立方体以不同的顺序,而不是实际排序。

+0

谢谢你的提示。解决方案很简单,首先绘制坚实的立方体做了诀窍。 – Christoph