基础理论
在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);