颜色缓冲区存储着像素点的颜色信息,当深度缓冲区开启时,当该像素点深度小于原来的深度时的颜色信息就会被替换为新的颜色信息。当咱们的颜色携带透明度信息时,就须要用到混合。数组
目标颜色
已经存储在颜色缓存区的颜色值 源颜色
做为当前渲染命令结果进入颜色缓存区的颜色值 当混合功能被启动时,源颜色和⽬标颜色的组合方式是混合方程式控制的。在默认状况下,混合⽅方程式以下所示: Cf = (Cs * S) + (Cd * D)
Cf :最终计算参数的颜色 Cs : 源颜色 Cd :目标颜色 S:源混合因子 D:⽬标混合因子缓存
开启混合 glEnable(GL_BlEND)
bash
设置混合因子 glBlendFunc(GLenum S,GLenum D)
S:源混合因⼦子 D:⽬目标混合因⼦子 混合因子以下图: 函数
下⾯经过一个常见的混合函数组合来讲明问题: glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)
若是颜⾊缓存区已经有一种颜色红色(1.0f,0.0f,0.0f,0.0f),这个目标颜色Cd,若是在这上面用⼀种alpha为0.6的蓝⾊色(0.0f,0.0f,1.0f,0.6f) Cd (⽬目标颜⾊色) = (1.0f,0.0f,0.0f,0.0f)
Cs (源颜⾊色) = (0.0f,0.0f,1.0f,0.6f);
S = 源alpha值 = 0.6f
D = 1 - 源alpha值= 1-0.6f = 0.4f
⽅方程式Cf = (Cs * S) + (Cd * D)
等价于 = (Blue * 0.6f) + (Red * 0.4f)
spa
选择混合⽅程式的函数: glbBlendEquation(GLenum mode)
3d
除了能使用glBlendFunc 来设置混合因子,还能够有更灵活的选择code
void glBlendFuncSeparate(GLenum strRGB,GLenum dstRGB ,GLenum strAlpha,GLenum dstAlpha);
strRGB: 源颜色的混合因子
dstRGB: ⽬标颜色的混合因子
strAlpha: 源颜色的Alpha因子
dstAlpha: ⽬标颜色的Alpha因子
复制代码
glBlendFunc
指定源和⽬标 RGBA
值的混合函数; glBlendFuncSeparate
函数则容许为RGB
和 Alpha
成分单独指定混合函数 GL_CONSTANT_COLOR、GL_ONE_MINUS_CONSTANT_COLOR、GL_CONSTANT_ALPHA、GL_ONE_MINUS_CONSTANT
值容许混合方程式中引入一个常量混合颜色。 常量混合颜色,默认初始化为⿊色(0.0f,0.0f,0.0f,0.0f) 修改常量混合颜色 void glBlendColor(GLclampf red ,GLclampf green ,GLclampf blue ,GLclampf alpha )
cdn