再繪制經過混合的透明物體
,用這種技巧結合光照系統來達到透明映射的效果來欺騙用戶。
混合因子:
混合的公式:最終的顏色=源顏色*源混合因子+目標顏色*目標混合因子
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();