再绘制经过混合的透明物体
,用这种技巧结合光照系统来达到透明映射的效果来欺骗用户。
混合因子:
混合的公式:最终的颜色=源颜色*源混合因子+目标颜色*目标混合因子
OpenGL使用函数:void glBlendFunc(s,d);来控制源因子和目标因子
s指明怎么计算源混合因子,d指明怎么计算目标混合因子
启用混合:
在指定如何计算混合因子之后,要使混合有效要先启用混合
glEnable(GL_BLEND);
要禁止混合功能:
glDisable(GL_BLEND);
实现:
要想在程序中使用混合并绘制出具有透明效果的3D场景,只启用混合与指定混合因子是不够的,因为在3D场景还有物体深度信息,一般的步骤是:首先启用深度测试的情况下,绘制所有的场景(包括所有不都明物体),然后再绘制透明的物体。而且要按照与深度缓存相反的次序来绘制,即按照由远即近的次序绘制物体;
1.启用深度测试
2.绘制场景中所有不透明的物体
3.关闭深度测试或者设置深度缓存为只读模式,并启用混合
4.绘制透明物体,按照由远即近的顺序
5.回复深度测试
1 glPushMatrix();
2 glLightfv(GL_LIGHT0,GL_POSITION,lightPosMirr);
3 glScalef(1,-1,1);
4 DrawObj();
5 glPopMatrix();
6 //以融合的方式绘制透明的地板,再在上面绘制物体
7 glEnable(GL_BLEND);
8 glBlendFunc(GL_SRC_ALPHA, GL_ONE);
9 DrawGround();
10 glDisable(GL_BLEND);//关闭融合,来绘制真正的物体
11 glEnable(GL_LIGHTING);
12 glLightfv(GL_LIGHT0, GL_POSITION, lightPOs);
13 DrawObj();