我正在尝试将两个纹理绘制到包含透明度的3D空间。当它们不重叠时,它们可以正常工作:
然而,当一个纹理与另一个纹理重叠时,透明度意味着您可以看到后面的纹理:
初始化混合时,我使用GL_SRC_ALPHA
和GL_ONE_MINUS_SRC_ALPHA
。
答案 0 :(得分:1)
您需要深度排序或使用alpha测试:
glEnable(GL_ALPHA_TEST);
glAlphaTest(GL_GREATER, 0.0f);
只会绘制alpha值大于0f的像素。但是,这不适用于混合透明像素。 Andon的解决方案是我使用的解决方案,虽然我在2D工作,但我必须具有烟雾效果的透明度。
答案 1 :(得分:1)
一种可能性是在片段着色器中使用discard
关键字,因为alpha测试不再适用于我们。这样做的缺点是具有对象的别名边缘。
另一种可能性是对对象进行深度排序并向后绘制。显而易见的缺点是必须首先执行转换和排序。如果可以静态地确定对象的顺序(当相机没有太大变化时),有时可以避免这种情况。另一个缺点是用不同的东西过度绘制阴影像素,从而丢掉了性能。
最后,您可以使用alpha-to-coverage,其中使用反相关硬件来处理透明度。这不需要排序并使对象的边缘平滑。缺点是每个渲染上下文都启用了这个功能,并且可能无法在任何地方使用。