不考虑其他后处理步骤的话,颜色混合是图形管线的最后一步标准操作。
颜色混合的原理,在之前的文章 《图片和纹理》 里,已经介绍过了。总体原理就是,使用 RGBA 中的 alpha 分量,当作源颜色和目标颜色的混合权重,得到两者混合的颜色。
我们这边直接使用 alpha 当作混合因子,并当作权重进行加权计算,其实是做了简化。在 OpenGL 中,颜色混合的设置参数更多,可以指定不同的混合方程和混合因子:glBlendFunc 函数可以指定源和目标的混合因子;glBlendEquation 函数可以设置源和目标颜色的混合方程。
代码实现
首先,如代码清单 1 所示,我们和 OpenGL 接口一样,在 Enable 处增加颜色混合开启。
混合的逻辑,在之前的设计中已经实现好了。我们再来梳理一下。如代码清单 2 所示,我们在光栅化画点的时候,如果开启了颜色混合,就会调用 BlendPixel 进行混合。
测试
最后,我们编写测试样例,来验证实现的混合功能。如代码清单 3 所示,我们画三个三角形。因为开启了深度测试,所以由远到近画,让新画的颜色能和底色混合起来。
图 1 是和底色依次混合的结果;图 2 是没有开启混合的结果。
本节的完整代码在 tag/blending。