再繪制經(jīng)過混合的透明物體
,用這種技巧結(jié)合光照系統(tǒng)來達(dá)到透明映射的效果來欺騙用戶。
混合因子:
混合的公式:最終的顏色=源顏色*源混合因子+目標(biāo)顏色*目標(biāo)混合因子
OpenGL使用函數(shù):void glBlendFunc(s,d);來控制源因子和目標(biāo)因子
s指明怎么計(jì)算源混合因子,d指明怎么計(jì)算目標(biāo)混合因子
啟用混合:
在指定如何計(jì)算混合因子之后,要使混合有效要先啟用混合
glEnable(GL_BLEND);
要禁止混合功能:
glDisable(GL_BLEND);
實(shí)現(xiàn):
要想在程序中使用混合并繪制出具有透明效果的3D場(chǎng)景,只啟用混合與指定混合因子是不夠的,因?yàn)樵?D場(chǎng)景還有物體深度信息,一般的步驟是:首先啟用深度測(cè)試的情況下,繪制所有的場(chǎng)景(包括所有不都明物體),然后再繪制透明的物體。而且要按照與深度緩存相反的次序來繪制,即按照由遠(yuǎn)即近的次序繪制物體;
1.啟用深度測(cè)試
2.繪制場(chǎng)景中所有不透明的物體
3.關(guān)閉深度測(cè)試或者設(shè)置深度緩存為只讀模式,并啟用混合
4.繪制透明物體,按照由遠(yuǎn)即近的順序
5.回復(fù)深度測(cè)試


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);//關(guān)閉融合,來繪制真正的物體
11 glEnable(GL_LIGHTING);
12 glLightfv(GL_LIGHT0, GL_POSITION, lightPOs);
13 DrawObj();