【发布时间】:2013-08-08 20:29:58
【问题描述】:
当图像的 alpha 因子为零时,为什么图像显示为白色。它应该是完全透明的。我正在使用混合函数作为 glBlend(GL_ONE,GL_ONE_MINUS_SRC_ALPHA)。
【问题讨论】:
标签: opengl-es
当图像的 alpha 因子为零时,为什么图像显示为白色。它应该是完全透明的。我正在使用混合函数作为 glBlend(GL_ONE,GL_ONE_MINUS_SRC_ALPHA)。
【问题讨论】:
标签: opengl-es
有道理,详情请仔细阅读official documentation。
但是为了简单的解释,让我给你一个简单的例子。所以想象你的来源是(255,0,0,0)(使用(R,G,B,A)符号),你的目的地是(0,255,0,0)。源值使用GL_ONE 加权,转换为(1.0f,1.0f,1.0f,1.0f),源值使用(1-0.0f,1-0.0f,1-0.0f,1-0.0f),因为您的SRC_ALPHA 是0。所以颜色的简化计算是:
R = 255 * 1.0f + 0 * 1.0f = 255
G = 0 * 1.0f + 255 * 1.0f = 255
B = 0 * 1.0f + 0 * 1.0f = 0
A = 0 * 1.0f + 0 * 1.0f = 0
| | | |
| | | destination weight
| | |
| | destination color
| |
| source weight
|
source color
所以你的最终颜色是(255,255,0,0)。您可能会对使用 GL_ONE 加权后的源的 alpha 为 0 的事实感到困惑,但这并不意味着任何事情,因为您没有告诉 OpenGL 将该 alpha 值用于任何事情。
另外,请记住,这是简化的,如果您提供了顶点颜色,则可能还会与 glTexEnv 及其 GL_TEXTURE_ENV_MODE 设置进行一些交互。
【讨论】: