3

我似乎无法让我的混合在 Android 上的 OpenGL ES 2 中正常工作。我所拥有的是带有 alpha 通道的纹理,我希望这些纹理与相应的 alpha 一起出现。即使顶部绘制的对象的 alpha 为 1.0,混合也会显示为加法。在我的片段着色器中,我为 alpha 硬编码了 1.0 的值,并意识到它似乎使用的是color,而不是alpha值。

例如,它看起来像这样:在此处输入图像描述

而不是这个:在此处输入图像描述

我以正确的顺序绘制,在这个例子中,蓝色应该在灰色方块的顶部完全不透明。我尝试了多种混合模式(一,一),(阿尔法,阿尔法)等,多种绘制顺序,以及使用和不使用深度测试。我尝试了产生不正确结果的随机混合模式,所以当我设置它时混合正在改变。

我相信问题在于opengl正在混合加色。(Alpha, Alpha) 对我来说很有意义,当我在着色器中明确将 alpha 设置为 1.0 时,我想我会得到一个正方形(纹理投影到的实际形状),上面有一个蓝色圆圈。这没有发生让我感到困惑,我想我对 sfactor 和 dfactor 混合功能还不够了解。

4

1 回答 1

3

您是否使用 Android Bitmap 类来加载纹理?

使用 GLUtils.texImage2D() 从 Android 上的位图加载 alpha 纹理已损坏。这是谷歌真正应该更好地记录的问题。问题是 Bitmap 类将所有图像转换为预乘格式,但这不适用于 OpenGL ES,除非图像完全不透明。

这篇文章提供了更多关于这个点击这里的细节。

于 2013-11-02T17:11:46.590 回答