我正在尝试混合具有透明区域的纹理:
glEnable( GL_TEXTURE_2D );
glBindTexture( GL_TEXTURE_2D, ...);
glVertexPointer( 2, GL_FLOAT, 0, ... );
glEnable (GL_BLEND);
glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glDrawArrays( GL_TRIANGLE_STRIP, 0, 4 );
除非我添加glDisable(GL_DEPTH_TEST),否则顶部纹理的透明部分会覆盖它们下面的所有内容(而不是混合)。有没有办法在不禁用深度的情况下做到这一点?我尝试了各种混合功能但没有帮助。
答案 0 :(得分:7)
启用深度测试实际上并不按照通常的GL_LESS
情况按深度对几何体进行排序,它只是防止基元在不比之前绘制的情况下更接近观察者时进行绘制。这允许您以任何您想要的顺序绘制不透明几何体并仍然获得所需结果,但正确渲染混合几何体通常需要已经渲染混合对象后面的所有内容。
以下是您应该做的事情,以使混合的不透明和混合几何看起来正确:
glDepthMask(GL_FALSE)
深度写入。或者,如果你的内容总是完全不透明或完全透明,你可以启用alpha测试并禁用混合,但我猜这不是你想要的。