l.t*_*e.a 5 textures alphablending opengl-es
我试图混合具有透明区域的纹理:
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 );
Run Code Online (Sandbox Code Playgroud)
除非我添加glDisable(GL_DEPTH_TEST),否则顶部纹理的透明部分会覆盖它们下面的所有内容(而不是混合).有没有办法在不禁用深度的情况下做到这一点?我尝试了各种混合功能但没有帮助.
启用深度测试实际上并不按深度对几何体进行排序 - 在通常的GL_LESS情况下,它仅仅防止图元在不比之前绘制的图像更接近观察者的情况下进行绘制.这允许您以任何您想要的顺序绘制不透明几何体并仍然获得所需结果,但正确渲染混合几何体通常需要已经渲染混合对象后面的所有内容.
这是您应该做的事情,以使混合的不透明和混合几何看起来正确:
glDepthMask(GL_FALSE).或者,如果您的内容总是完全不透明或完全透明,您可以启用alpha测试并禁用混合,但我猜这不是您正在寻找的内容.
| 归档时间: |
|
| 查看次数: |
2231 次 |
| 最近记录: |