OpenGL-颜色混合浅析

基础理论

在OpenGL中,物体透明技术通常被叫做混合(Blending)。

OpenGL渲染时会把颜色值存在颜色缓存区中深度值放在深度缓冲区

深度缓冲区被关闭时,新的颜色将简单的覆盖原来颜色缓存区存在的颜色值,

当深度缓冲区再次打开时,新的颜色片段只是当它们比原来的值更接近邻近的裁剪平面才会替换原来的颜色片段

OpenGL 会把源颜色和目标颜色各自取出,并乘以一个系数(源颜色乘以的系数称为“源因子”,目标颜色乘以的系数称为“目标因子”),然后相加,这样就得到了新的颜色。(也可以不是相加,新版本的OpenGL可以设置运算方式,包括加、减、取两者中较大的、取两者中较小的、逻辑运算等)

用数学公式来表达一下这个运算方式。

假设源颜色的四个分量(指红色,绿色,蓝色,alpha值)是(Rs, Gs, Bs, As),目标颜色的四个分量是(Rd, Gd, Bd, Ad),又设源因子为(Sr, Sg, Sb, Sa),目标因子为(Dr, Dg, Db, Da)。则混合产生的新颜色可以表示为:

(Rs*Sr+Rd*Dr, Gs*Sg+Gd*Dg, Bs*Sb+Bd*Db, As*Sa+Ad*Da)

当然了,如果颜色的某一分量超过了1.0,则它会被自动截取为1.0,不需要考虑越界的问题。

如何使用

// 使用OpenGL的混合功能
glEnable(GL_BLEND);

// 关闭OpenGL的混合功能
glDisable(GL_BLEND);

混合函数

// 设置混合因子,需要用到glBlendFun函数
// S:源混合因子
// D:目标混合因子
glBlendFunc(GL enum S,GLenum D);
混合因子

常用混合函数

glBlendFunc(GL_ SRC ALPHA,GL ONE_ MINUS SRC ALPHA);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。