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

Opengl es 混合透明图像显示白色因子,opengl-es,Opengl Es,当阿尔法因子为零时,为什么图像显示为白色。它应该是完全透明的。我将混合函数用作glBlend(GL_ONE,GL_ONE _减去_SRC_ALPHA)。这很有意义,有关详细信息,请仔细阅读 但是为了简单的解释,让我给你一个简单的例子。因此,假设您的源代码是(255,0,0,0)(使用(R,G,B,A)表示法),目标代码是(0255,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

当阿尔法因子为零时,为什么图像显示为白色。它应该是完全透明的。我将混合函数用作glBlend(GL_ONE,GL_ONE _减去_SRC_ALPHA)。

这很有意义,有关详细信息,请仔细阅读

但是为了简单的解释,让我给你一个简单的例子。因此,假设您的源代码是
(255,0,0,0)
(使用(R,G,B,A)表示法),目标代码是
(0255,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
因此,您的最终颜色将是
(255255,0,0)
。使用
GL_ONE
加权后的源代码的alpha值为
0
这一事实可能会让您感到困惑,但这并不意味着什么,因为您没有告诉OpenGL将该alpha值用于任何事情

另外,请记住,这是简化的,如果您提供了顶点颜色,则也可能与
glTexEnv
及其
GL_纹理_ENV_模式
设置有一些交互作用