OpenGL 混合

缘由

颜色缓冲区存储着像素点的颜色信息,当深度缓冲区开启时,当该像素点深度小于原来的深度时的颜色信息就会被替换为新的颜色信息。当咱们的颜色携带透明度信息时,就须要用到混合。数组

混合颜色

目标颜色 已经存储在颜色缓存区的颜色值 源颜色 做为当前渲染命令结果进入颜色缓存区的颜色值 当混合功能被启动时,源颜色和⽬标颜色的组合方式是混合方程式控制的。在默认状况下,混合⽅方程式以下所示: Cf = (Cs * S) + (Cd * D) Cf :最终计算参数的颜色 Cs : 源颜色 Cd :目标颜色 S:源混合因子 D:⽬标混合因子缓存

使用

开启混合 glEnable(GL_BlEND) bash

image.png

设置混合因子 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

混合方程式模式

glBlendFuncSeparate函数

除了能使用glBlendFunc 来设置混合因子,还能够有更灵活的选择code

void glBlendFuncSeparate(GLenum strRGB,GLenum dstRGB ,GLenum strAlpha,GLenum dstAlpha);
strRGB: 源颜色的混合因子
dstRGB: ⽬标颜色的混合因子 
strAlpha: 源颜色的Alpha因子 
dstAlpha: ⽬标颜色的Alpha因子

复制代码

glBlendFunc指定源和⽬标 RGBA值的混合函数; glBlendFuncSeparate函数则容许为RGBAlpha 成分单独指定混合函数 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

相关文章
相关标签/搜索