OpenGL混合模式

2021-06-20 13:57:39 字數 2007 閱讀 2125

glblendfunc是這樣:第乙個引數指出源圖元的alpha的取值計算方法,第二個引數指出目標處的alpha的計算方法。 

opengl會把源顏色和目標顏色各自取出,並乘以乙個係數(源顏色乘以的係數稱為「源因子」,目標顏色乘以的係數稱為「目標因子」),然後相加,這樣就得到了新的顏 色。(也可以不是相加,新版本的opengl可以設定運算方式,包括加、減、取兩者中較大的、取兩者中較小的、邏輯運算等,但我們這裡為了簡單起見,不討 論這個了)

下面用數學公式來表達一下這個運算方式。假設源顏色的四個分量(指紅色,綠色,藍色,alpha值)是(rs, gs, bs, as),目標顏色的四個分量是(rd, gd, bd, ad),又設源因子為(sr, sg, sb, sa),目標因子為(dr, dg, db, da)。則混合產生的新顏色可以表示為:

(rs*sr+rd*dr, gs*sg+gd*dg, bs*sb+bd*db, as*sa+ad*da)

當然了,如果顏色的某一分量超過了1.0,則它會被自動擷取為1.0,不需要考慮越界的問題。

源因子和目標因子是可以通過glblendfunc函式來進行設定的。glblendfunc有兩個引數,前者表示源因子,後者表示目標因子。這兩個引數可以是多種值,下面介紹比較常用的幾種。

gl_zero: 表示使用0.0作為因子,實際上相當於不使用這種顏色參與混合運算。

gl_one: 表示使用1.0作為因子,實際上相當於完全的使用了這種顏色參與混合運算。

gl_src_alpha:表示使用源顏色的alpha值來作為因子。

gl_dst_alpha:表示使用目標顏色的alpha值來作為因子。

gl_one_minus_src_alpha:表示用1.0減去源顏色的alpha值來作為因子。

gl_one_minus_dst_alpha:表示用1.0減去目標顏色的alpha值來作為因子。

除 此以外,還有gl_src_color(把源顏色的四個分量分別作為因子的四個分量)、gl_one_minus_src_color、 gl_dst_color、gl_one_minus_dst_color等,前兩個在opengl舊版本中只能用於設定目標因子,後兩個在opengl 舊版本中只能用於設定源因子。新版本的opengl則沒有這個限制,並且支援新的gl_const_color(設定一種常數顏色,將其四個分量分別作為 因子的四個分量)、gl_one_minus_const_color、gl_const_alpha、 gl_one_minus_const_alpha。另外還有gl_src_alpha_saturate。新版本的opengl還允許顏色的alpha 值和rgb值採用不同的混合因子。

舉例來說:

如果設定了glblendfunc(gl_one, gl_zero);,則表示完全使用源顏色,完全不使用目標顏色,因此畫面效果和不使用混合的時候一致(當然效率可能會低一點點)。如果沒有設定源因子和目標因子,則預設情況就是這樣的設定。

如果設定了glblendfunc(gl_zero, gl_one);,則表示完全不使用源顏色,因此無論你想畫什麼,最後都不會被畫上去了。(但這並不是說這樣設定就沒有用,有些時候可能有特殊用途)

如 果設定了glblendfunc(gl_src_alpha, gl_one_minus_src_alpha);,則表示源顏色乘以自身的alpha 值,目標顏色乘以1.0減去源顏色的alpha值,這樣一來,源顏色的alpha值越大,則產生的新顏色中源顏色所佔比例就越大,而目標顏色所佔比例則減 小。這種情況下,我們可以簡單的將源顏色的alpha值理解為「不透明度」。這也是混合時最常用的方式。

如果設定了glblendfunc(gl_one, gl_one);,則表示完全使用源顏色和目標顏色,最終的顏色實際上就是兩種顏色的簡單相加。例如紅色(1, 0, 0)和綠色(0, 1, 0)相加得到(1, 1, 0),結果為黃色。

注意:所 謂源顏色和目標顏色,是跟繪製的順序有關的。假如先繪製了乙個紅色的物體,再在其上繪製綠色的物體。則綠色是源顏色,紅色是目標顏色。如果順序反過來,則 紅色就是源顏色,綠色才是目標顏色。在繪製時,應該注意順序,使得繪製的源顏色與設定的源因子對應,目標顏色與設定的目標因子對應。不要被混亂的順序搞暈 了。

OpenGL 混合功能

核心 void renderscene glfloat vgreen glfloat vblue glfloat vblack 繪製四個固定矩形 glt shader identity 單元著色器 shadermanager.usestockshader glt shader identity,vr...

OpenGL學習筆記 混合

所謂混合 glenable gl blend 就是把兩種顏色混合在一起,通過公式或設定,達到想要的顏色效果。只有rgba才能使用混合,顏色索引模式無法使用混合功能。混合的前提是,要有兩個顏色 廢話 乙個是已經畫上去的顏色 destination color,目標顏色 乙個是將要畫上去的顏色 sour...

opengl顏色混合

注源顏色是當前顏色,目標顏色是背景顏色。顏色混合公式 混合之後的rgb顏色分量 影象的rgb顏色分量 alpha值 背景的rgb顏色分量 1 alpha值 開啟顏色混合步驟 1,glblendfunc gl src alpha,gl one 開啟混合 gldisable gl depth test ...