opengl z-sorting透明度

时间:2011-05-12 21:48:14

标签: opengl transparency depth-buffer

我在opengl es 2.0中的简单方块上渲染png,但是当我尝试在正方形后面绘制一些东西时,我已经绘制了我的顶部正方形中的透明区域呈现与背景相同的颜色。

我在每次渲染调用开始时调用它们。

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST);
glEnable (GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

3 个答案:

答案 0 :(得分:5)

你的头衔基本上就是你问题的答案!

通常透明度是通过首先渲染场景中的所有不透明对象(让z缓冲区找出可见的内容),然后从后到前渲染所有透明对象来完成的。

答案 1 :(得分:5)

想出来。您可以在片段着色器中丢弃

mediump vec4 basecolor = texture2D(sTexture, TexCoord);

if (basecolor.a == 0.0){
    discard;
}

gl_FragColor = basecolor;

答案 2 :(得分:4)

Drew Hall给了您一个很好的答案,但另一个选择是将glEnable(GL_ALPHA_TEST)设置为glAlphaFunc(GL_GREATER, 0.1f)。这将防止透明像素(在这种情况下,具有α<0.1f的像素)被渲染。这样他们就不会写入Z缓冲区,其他东西可以“显示”。但是,这仅适用于完全透明的对象。它在0.1 alpha边缘的任何地方都有粗糙的边缘,这对于像素与物体相比较大的远距离特征看起来很糟糕。