混合透明图像显示白色因子

时间:2013-08-08 09:23:43

标签: opengl-es

为什么图像显示为白色,当其alpha因子为零时。它应该是完全透明的。我使用混合函数作为glBlend(GL_ONE,GL_ONE_MINUS_SRC_ALPHA)。

1 个答案:

答案 0 :(得分:0)

这很有意义,因为细节请仔细阅读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加权后的源具有0的alpha这一事实感到困惑,但这并不意味着什么,因为您没有告诉OpenGL将该alpha值用于任何事情。

此外,请记住这是简化的,如果您提供了顶点颜色,则可能还会与glTexEnv及其GL_TEXTURE_ENV_MODE设置进​​行一些互动。