融合

来源:互联网 发布:淘宝客怎么样 编辑:程序博客网 时间:2024/03/28 23:07

融合可将两种颜色的R、G、B分量按一定比例混在一起形成一种新的颜色,RGBA颜色模式中的A即表示Alpha值,对应于颜色的混合比例。由于只有在RGBA模式中才能对A值进行说明,因此融合不能在颜色索引模式下使用。融合操作可通过源因子(Sr、Sg、Sb、Sa)与目的因子(Dr、Dg、Db、Da)计算锝出,融合结果为(Rs*Sr+Rd*Dr, Gs*Sg+Gd*Dg, Bs*Sb+Bd*Db, As*Sa+Ad*Da)每个元素值都在范围[0, 1]内。可以看出,融合处理的关键就是对融合因子(Sr,Sg,Sb,Sa)和(Dr,Dg,Db,Da)的设定。在OpenGL中,源因子和目的因子通过glBlendFunc()函数产生,其函数形式为:

void glBlendFunc(GLenum sfactor,GLenum dfactor)

  
  通过指定参数sfactor和dfactor来分别指出计算源因子和目的因子的方式。具体取值可参见下表。在产生了融合因子值后,还需调用glEnable(GL_BLEND)和glDisable(GL_BLEND)来启用、关闭融合处理。

常数相关因子融合因子结果GL_ZERO源因子或目的因子(0,0,0,0)GL_ONE源因子或目的因子(1,1,1,1)GL_DST_COLOR 源因子 (Rd,Gd,Bd,Ad)GL_SRC_COLOR目的因子(Rs,Gs,Bs,As)GL_ONE_MINUS_DST_COLOR源因子 (1,1,1,1)-(Rd,Gd,Bd,Ad)GL_ONE_MINUS_SRC_COLOR 目的因子(1,1,1,1)-(Rs,Gs,Bs,As)GL_SRC_ALPHA源因子或目的因子(As,As,As,As)GL_ONE_MINUS_SRC_ALPHA源因子或目的因子(1,1,1,1)-(As,As,As,As)GL_DST_ALPHA 源因子或目的因子(Ad,Ad,Ad,Ad)GL_ONE_MINUS_DST_ALPHA 源因子或目的因子 (1,1,1,1)-(Ad,Ad,Ad,Ad)GL_SRC_ALPHA_SATURATE源因子(f,f,f,1); f=min(As,1-Ad)

 

例如:

glBlendFunc(GL_SRC_ALPHA, GL_ONE);
表示把渲染的图像叠加到目标区域,也就是说源的每一个像素的alpha都等于自己的alpha,目标的每一个像素的alpha等于1。这样叠加次数越多,叠加的图元的alpha越高,得到的结果就越亮。因此这种融合用于表达光亮效果。

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
表示把渲染的图像融合到目标区域。也就是说源的每一个像素的alpha都等于自己的alpha,目标的每一个像素的alpha等于1减去该位置源像素的alpha。 因此不论叠加多少次,亮度是不变的。