混合
在OpenGL中握侧,物體透明技術(shù)通常被叫做混合(Blending)蚯瞧。透明是物體(或物體的一部分)非純色而是混合色,這種顏色來自于不同濃度的自身顏色和它后面的物體顏色品擎。
一個(gè)物體的透明度埋合,被定義為它的顏色的alpha值。
開啟混合:glEnable(GL_BLEND);
OpenGL以下面的方程進(jìn)行混合:
片段著色器運(yùn)行完成并且所有的測試都通過以后萄传,混合方程才能自由執(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ù)分開來設(shè)置衍菱。
也可以為RGB和alpha通道各自設(shè)置不同的選項(xiàng)贷揽,使用glBlendFuncSeperate:
glBlendFuncSeperate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA,GL_ONE, GL_ZERO);
void glBlendEquation(GLenum mode)允許我們設(shè)置不同的操作,有3種可行的選項(xiàng):
要讓混合在多物體上有效梦碗,我們必須先繪制最遠(yuǎn)的物體,最后繪制最近的物體蓖救。普通的無混合物體仍然可以使用深度緩沖正常繪制洪规,所以不必給它們排序。我們一定要保證它們在透明物體前繪制好循捺。當(dāng)無透明度物體和透明物體一起繪制的時(shí)候斩例,通常要遵循以下原則:
先繪制所有不透明物體。 為所有透明物體排序从橘。 按順序繪制透明物體念赶。
面剔除
可以不用繪制不會(huì)出現(xiàn)在觀察者視野外的物體(比如角度立方體看不到的面)來提高渲染的性能础钠。
面剔除(Face culling),OpenGL允許檢查所有正面朝向(Front facing)觀察者的面叉谜,并渲染它們旗吁,而丟棄所有背面朝向(Back facing)的面,這樣就節(jié)約了我們很多片段著色器的命令停局。OpenGL分析頂點(diǎn)數(shù)據(jù)的連接順序(Winding order)來判斷物體的正面和反面很钓。
頂點(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í)針順序。