混合、面剔除

混合

在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ù)

顏色常數(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)鏈接順序

三角形的頂點(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í)針順序。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容