一、什么叫混合
直白的说,混合就是将源颜色(新片断)与目标颜色(侦缓冲区中的)进行某种组合,然后将新颜色放入侦缓冲区。另外进行混合前先要进行 Alpha 测试,决定是否接受此片断。
二、混合的原理
先来定义几个概念:
1. 源颜色 (Rs, Gs, Bs, As)
2. 目标颜色 (Rd, Gd, Bd, Ad)
3. 源混合因子(Sr, Sg, Sb, Sa)
4. 目标混合因子(Dr, Dg, Db, Da)
最终混合的颜色为(RsSr + RdDr, GsSg + GdDg, BsSb + BdDb, AsSa + AdDa) (这个公式真绕人)
三、混合的实现
1. 先要启用混合 glEnable(GL_BLEND)
2. 源混合因子与目标混合因子的设置:
void glBlendFunc(GLenum srcfactor, GLenum destfactor)
参数是枚举的,代表了不同的混合因子。
四、问题
1. 由于OpenGL光照时,是没有考虑材料颜色的(也就是glColor给顶点上的颜色),那么当我开了光照后,混合是怎么计算的?