颜色混合

OpenGL渲染时会把颜色值和深度值存在相应的颜色缓冲区和深度缓冲区中,深度缓冲区被关闭时,新的颜色值将简单的覆盖原来颜色缓冲区存在的颜色值,当深度缓冲区再次打开时,新的颜色片段那些相对于原来而言更接近近裁剪面的颜色片段。

如果开启深度测试后,有一个图层是半透明的,另一个是非半透明的,那么就不能只是单纯的比较深度值然后进行覆盖,而要进行颜色混合。

1、开启颜色混合:glEnable(GL_BlEND);

2、关闭颜色混合:glDisable(GL_BlEND);

在开启颜色混合后,OpenGL会通过特定的方程式来进行颜色混合的计算,在默认情况下,颜色的混合方程式如下:

Cf = (Cs * S) + (Cd * D);

Cf:最终计算参数的颜色;

Cs:源颜色; 作为当前渲染命令进入颜色缓冲区的颜色值,当前颜色值。

Cd:目标颜色; 已经存在颜色缓冲区的颜色值。

S:源混合因子;

D:目标混合因子;

我们除了使用默认的混合方程式,还可以设置自己想要的混合因子

可以通过glBlendFunc(GLenum S,GLenum D);来设置混合因子

S:源混合因子

D:目标混合因子

下面举一个例子:

如果颜色缓冲区已经存在一个颜色 蓝色,然后在加入一个颜色 红色 alpha为0.4;那么他的计算公式为

Cf = (红色 * 0.4)+ (蓝色 * (1 - 0.4));

上面这个方程式实例说明:添加进去的源颜色alpha越大,那么源颜色所占比重越大,相对应的目标颜色保留的就越少。

其他的颜色方程式

除了默认的颜色混合方程式,还有其他的方程式,一般有一下5种:


混合方程式

以下是一个小案例执行后的效果,具体做法之后补充:


结果
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容