use*_*443 1 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);
Run Code Online (Sandbox Code Playgroud)
德鲁霍尔给了你一个很好的答案,但另一种选择是glEnable(GL_ALPHA_TEST)设置glAlphaFunc(GL_GREATER, 0.1f)。这将阻止透明像素(在本例中为 alpha < 0.1f 的像素)被渲染。这样它们就不会写入 Z 缓冲区,并且其他内容可以“显示出来”。然而,这仅适用于完全透明的物体。无论 0.1 alpha 边缘在哪里,它都具有粗糙的边缘,对于像素比对象大的远处特征来说,这可能看起来很糟糕。
弄清楚了.您可以在片段着色器中丢弃
mediump vec4 basecolor = texture2D(sTexture, TexCoord);
if (basecolor.a == 0.0){
discard;
}
gl_FragColor = basecolor;
Run Code Online (Sandbox Code Playgroud)