混合可以实现很多效果,笔记单纯的记录混合的原理,和混合公式,混合函数的使用。最后分析书中的两个混合代码例子,两个例子结合起来说明了绘图顺序对混合最终效果的影响,及如何去规避这样的问题。在颜色中之前一直忽略的第四个分量alpha终于派上用场。在启用混合情况下,alpha常常用于把被处理片断的颜色值与已经存在帧缓冲区的像素颜色值进行组合。混合操作是在场景进行了光栅化并转换为像素之后,但是在最终的像素绘制到帧缓冲区之前进行。
一、源(新片断)因子和目标(旧片断)因子
在混合过程中,新旧片断的组合分两步进行。首先,需要如何计算源和目标混合因子(混合因子)。这两个因子都是RGBA四元组,分别与源颜色和目标颜色的RGBA相乘。然后两个RGBA四元组对应成分再进行组合(混合公式)。最终的RGBA颜色是通过下面的公式得出:
(Rs*Sr +Rd*Dr, Gs*Sg + Gd*Dg, Bs*Sb + Bd*Db, As*Sa + Ad*Da )
源颜色(Rs, Bs, Gs, As)、目标颜色(Rd, Gd, Bd, Ad)、源混合因子(Sr, Sg, Sb, Sa)、目标混合因子(Dr, Dg, Db, Da)
常量
|
RGB混合因子
|
alpha混合因子
|
GL_ZERO
|
(0,0,0)
|
0
|
GL_ONE
|
(1,1,1)
|
1
|
GL_SRC_COLOR
|
(Rs,Gs,Bs)
|
As
|
GL_ONE_MINUS_SRC_COLOR
|
(1,1,1)-(Rs,Gs,Bs)
|
1-As
|