混合
在OpenGL中,物體透明技術(shù)通常被叫做混合(Blending)。透明是物體(或物體的一部分)非純色而是混合色,這種顏色來(lái)自于不同濃度的自身顏色和它后面的物體顏色。
一個(gè)物體的透明度,被定義為它的顏色的alpha值。
開(kāi)啟混合:glEnable(GL_BLEND);
OpenGL以下面的方程進(jìn)行混合:

片段著色器運(yùn)行完成并且所有的測(cè)試都通過(guò)以后,混合方程才能自由執(zhí)行片段的顏色輸出,當(dāng)前它在顏色緩沖中(前面片段的顏色在當(dāng)前片段之前儲(chǔ)存)。源和目標(biāo)顏色會(huì)自動(dòng)被OpenGL設(shè)置,而源和目標(biāo)因子可以讓我們自由設(shè)置。
混合函數(shù)
void glBlendFunc(GLenum sfactor, GLenum dfactor)
設(shè)置源(source)和目標(biāo)(destination)因子。

顏色常數(shù)向量Cconstant可以用glBlendColor函數(shù)分開(kāi)來(lái)設(shè)置。
也可以為RGB和alpha通道各自設(shè)置不同的選項(xiàng),使用glBlendFuncSeperate:
glBlendFuncSeperate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA,GL_ONE, GL_ZERO);
void glBlendEquation(GLenum mode)允許我們?cè)O(shè)置不同的操作,有3種可行的選項(xiàng):

要讓混合在多物體上有效,我們必須先繪制最遠(yuǎn)的物體,最后繪制最近的物體。普通的無(wú)混合物體仍然可以使用深度緩沖正常繪制,所以不必給它們排序。我們一定要保證它們?cè)谕该魑矬w前繪制好。當(dāng)無(wú)透明度物體和透明物體一起繪制的時(shí)候,通常要遵循以下原則:
先繪制所有不透明物體。 為所有透明物體排序。 按順序繪制透明物體。
面剔除
可以不用繪制不會(huì)出現(xiàn)在觀察者視野外的物體(比如角度立方體看不到的面)來(lái)提高渲染的性能。
面剔除(Face culling),OpenGL允許檢查所有正面朝向(Front facing)觀察者的面,并渲染它們,而丟棄所有背面朝向(Back facing)的面,這樣就節(jié)約了我們很多片段著色器的命令。OpenGL分析頂點(diǎn)數(shù)據(jù)的連接順序(Winding order)來(lái)判斷物體的正面和反面。
頂點(diǎn)鏈接順序

默認(rèn)情況下,逆時(shí)針的頂點(diǎn)連接順序被定義為三角形的正面。實(shí)際的頂點(diǎn)連接順序是在光柵化階段(Rasterization stage)計(jì)算的,所以當(dāng)頂點(diǎn)著色器已經(jīng)運(yùn)行后。頂點(diǎn)就能夠在觀察者的觀察點(diǎn)被看到。
1,啟用面剔除:glEnable(GL_CULL_FACE);
2,剔除特定的面:glCullFace(GL_BACK);
GL_BACK,GL_FRONT,GL_FRONT_AND_BACK
3,改變判定正面的標(biāo)準(zhǔn):glFrontFace(GL_CCW);
默認(rèn)值是GL_CCW,它代表逆時(shí)針,GL_CW代表順時(shí)針順序。