1.1 将当前片元的颜色与已经在颜色缓冲中的值进行混合,但是需要从远到近绘制,否则混合就出错。
- 当前片元的颜色:源颜色 C s C_s Cs;
- 已经在颜色缓冲区中的颜色:目标颜色 C d C_d Cd;
- 源片元的混合因子:S;
- 目标片元的混合因子:D;
最终的混合颜色 = C s ∗ S + C d ∗ D C_s * S + C_d * D Cs∗S+Cd∗D,针对RGBA的颜色值,每个分量都采用上述公式计算,每个分量的混合因子可以不相同。
1.2 OpenGL中相关函数
glEnable(GL_BLEND);
void glBlendFunc(GLenum sfactor,GLenum dfactor);
void glBlendEquation(GLenum mode);
sfactor的值为:
dfactor的值为:
mode的值为:
每个符号常量代表的意思如下:
1.3 半透明混合因子的设置
c o l o r = a l p h a ∗ c o l o r s + ( 1 − a l p h a ) ∗ c o l o r d color = alpha * color_s + (1 - alpha) * color_d color=alpha∗colors+(1−alpha)∗colord;
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
1.4 如果场景中既有半透明物体,又有不透明物体,一般可以先绘制不透明物体,按照正常方式对深度缓冲区进行操作,再将半透明物体排序,并按从后往前的顺序混合绘制半透明名物体,一般都能得到较好的结果。