glBlendFunc中GL_SRC_ALPHA的比例因子

时间:2019-02-19 15:58:34

标签: opengl

Kronos web-page说,GL_SRC_ALPHA, GL_ONE, etc.指定的混合方法为三个颜色通道以及alpha通道中的每一个定义了四个比例因子。具体来说,GL_SRC_ALPHA的比例因子计算如下:

enter image description here

其中A_s0是源的alpha值,而kA的计算如下: enter image description here,其中m_c是相应的红色,绿色,蓝色或alpha位平面的数量。

  1. 我想知道这些位平面是什么?
  2. 为什么要根据上述公式计算kA?

例如,对于我来说很清楚,如果有1个来源为GL_SRC_ALPHA的目的地和1个目的地为GL_ONE_MINUS_SRC_ALPHA的目的地,其混合因子仅为1减去上述值。如果kA = 1,则混合是源和目标颜色之间的线性插值,并按其alpha值(即alpha_s * source_color + (1-alpha_s) * destination_color加权)。 kA在这里如何发挥作用?

1 个答案:

答案 0 :(得分:3)

基本上,所有这些都描述了unsigned integer normalization的过程:将整数值转换为[0,1]范围内的浮点值。该页面是在假设所有相关值都是整数的情况下编写的。由于混合操作是使用浮点值进行的,因此必须对整数进行标准化处理,然后才能进行任何计算。

kA只是该特定颜色通道中的位数(它们称为“位平面”的数量)。除以kA会将整数范围[0,kA]上的值映射到浮点范围[0,1]。

您可能会感到困惑的是,在现代 OpenGL中,源值不是 integers 。从片段着色器输出的值是浮点型。帧缓冲区中的目标值可以是浮点数或归一化的整数,但是如果将它们归一化,它们将在混合方程到达它们之前被映射到[0,1]。

基本上,该页面从未真正更新过以适合现代OpenGL。甚至是OpenGL 2.0。最好忽略它和use something else