Bootstrap

OpenGL ES 3. 混合详解

大家好,接下来将为大家介绍OpenGL ES 3. 混合。

 1、混合的用途

        现实世界中有很多半透明的物体,如果希望在场景中真实再现此类物体,最常用的技术就是混合。

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

        混合技术就是将两个片元调和,主要用于将通过各项测试准备进入帧缓冲的片元 (源片元)与帧缓冲中的原有片元(目标片元)按照设定的比例加权计算出最终片元的颜色值。也就是说在启用了混合的情况下,新片元将不再是直接覆盖缓冲区中的原片元,而是对两个片元进行加权计算。

2、混合颜色输入

目标颜色:已经存储在颜色缓存区的颜色值。
源颜色:作为当前渲染命令被传进入颜色缓存区的颜色值。
当混合功能被启动时,源颜色和⽬标颜色的组合方式是混合方程式控制的。

在默认情况下,混合⽅方程式如下所示:
Cf = (Cs * S) + (Cd * D) 。
Cf:最终计算参数的颜色。
Cs:源颜色。
Cd:目标颜色。
S:源混合因子。
D:⽬标混合因子。

3、开启混合方式

开启混合

glEnable(GL_BlEND)

设置混合因子

glBlendFunc(GLenum S,GLenum D)

S:源混合因⼦
D:目标混合因⼦

关闭混合

glDisable(GL_BlEND)


混合因子如下图:

 

选择混合⽅程式的函数:

glbBlendEquation(GLenum mode)

glBlendFuncSeparate函数:

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

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值允许混合方程式中引入一个常量混合颜色。

 

最后,欢迎大家一起交流学习:微信:liaosy666 ; QQ:2209115372 。

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;