隐藏第二行透明面?

时间:2013-10-14 10:25:43

标签: android opengl-es opengl-es-2.0 transparency

我正在尝试显示地理上复杂的半透明(例如alpha = 0.5)对象(terrain)。当我渲染这个物体时,也会画出这个物体的隐藏正面(就像一座实际上位于另一个物体后面的山丘)。

我想在“地形”对象后面看到其他物体,但不想看到我的地形(第二座山)隐藏的面孔。所以实际设置“整个”对象的透明度,而不是单个面。

问:如何隐藏半透明物体的“隐藏”正面?

我通过将颜色矢量与所需的透明度相乘来设置顶点着色器中的透明度:

fColor = vec4(vColor, 1.0);
fColor *= 0.5;
// fColor goes to fragment shader
使用GL_DEPTH_TEST作为深度函数激活

GL_LEQUAL

使用GL_BLEND激活

GL_ONE, GL_ONE_MINUS_SRC_ALPHA作为混合函数。

我尝试在绘制之前按GLES20.glDepthMask(false);停用深度缓冲区,但这没有任何区别。

可能我不知道正确的深度缓冲设置或混合功能。

1 个答案:

答案 0 :(得分:0)

嗯,我想我现在明白了:

实际上我可以根据混合情况辞职。打开深度测试后,只能看到前景片段(我的地形的前山)。通过顶点着色器中的乘法,片段着色器将以所需的透明度绘制这些可见片段(整个地形变为半透明)。

因此,深度测试,混合,顶点着色器中的颜色乘法。