Android OpenGL ES 2 - 混合似乎总是相加的

标签 android opengl-es alpha blending

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

例如,它看起来像这样:enter image description here

而不是这个:enter image description here

我按照正确的顺序绘制,在这个例子中,蓝色在灰色方 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/

相关文章:

iphone - 为 AR 应用程序创建 3D 模型

android - 在 OpenGL ES2 模型旋转的旋转矩阵中切换设备轴

android - 删除 android 4 上的 editText 透明度

android - 如何在不影响 Android 文本的情况下更改按钮 alpha

Android ActionBar 搜索字段

Android studio 将本地化资源中的字符串(在 Textview 中)的一部分作为可点击的 url?

java - 如何在我的应用上使用 Admob Live 广告?

android - TwoPassFilter GPUImage 究竟做了什么?

IOS:在 UIImage 中设置 alpha

Android Firebase - setPersistenceEnabled(true) 使应用程序崩溃