我似乎无法让我的混合在 Android 上的 OpenGL ES 2 中正常工作。我拥有的是带有 alpha channel 的纹理,我希望它们与相应的 alpha 一起出现。即使顶部绘制对象的 alpha 为 1.0,混合也会显示为叠加。在我的 fragment 着色器中,我将 alpha 值硬编码为 1.0,并意识到它似乎使用的是 color,而不是 alpha 值。
例如,它看起来像这样:
而不是这个:
我按照正确的顺序绘制,在这个例子中,蓝色在灰色方 block 的顶部应该是完全不透明的。我尝试了多种混合模式(一个,一个),(alpha,alpha)等,多个绘制顺序,以及使用和不使用深度测试。我尝试过随机混合模式,但结果不正确,所以当我设置它时混合会发生变化。
我认为问题在于 opengl 正在混合附加颜色。 (Alpha, Alpha) 对我来说很有意义,当我在着色器中明确地将 alpha 设置为 1.0 时,我想我会得到一个上面有一个蓝色圆圈的正方形(纹理投影的实际形状)。这没有发生让我感到困惑,我想我对 sfactor 和 dfactor 混合功能的理解还不够。
最佳答案
您是否使用 Android Bitmap 类来加载您的纹理?
在 Android 上使用 GLUtils.texImage2D() 从 Bitmap 加载 alpha 纹理已损坏。这是谷歌确实应该更好地记录的问题。问题在于 Bitmap 类将所有图像转换为预乘格式,但这不适用于 OpenGL ES,除非图像完全不透明。
本文提供了有关此 click here 的更多详细信息.
关于Android OpenGL ES 2 - 混合似乎总是相加的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19743594/