OpenGL實現顏色混合

2021-06-22 09:45:40 字數 1953 閱讀 8161

在opengl中,我們兩個物體如果疊在一起,想看到他們混合後的顏色就可以利用它所提供的api:glblendfunc

下面用數學公式來表達一下這個運算方式。假設源顏色的四個分量(指紅色,綠色,藍色,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有兩個引數,前者表示源因子,後者表示目標因子。這兩個引數可以是多種值,下面介紹比較常用的幾種。

void winapi glblendfunc( 

glenum sfactor,

glenum dfactor

);parameters

sfactor

specifies how the red, green, blue, and alpha source-blending factors are computed. nine symbolic constants are accepted: gl_zero, gl_one, gl_dst_color, gl_one_minus_dst_color, gl_src_alpha, gl_one_minus_src_alpha, gl_dst_alpha, gl_one_minus_dst_alpha, and gl_src_alpha_saturate.

dfactor

specifies how the red, green, blue, and alpha destination-blending factors are computed. eight symbolic constants are accepted: gl_zero, gl_one, gl_src_color, gl_one_minus_src_color, gl_src_alpha, gl_one_minus_src_alpha, gl_dst_alpha, and gl_one_minus_dst_alpha.

return value

this function does not return a value.

例子:

void cshape3d::draw********(void)

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值採用不同的混合因子。

opengl顏色混合

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

OpenGL顏色混合 glBlendFunc

混合是什麼呢?混合就是把兩種顏色混在一起。具體一點,就是把某一畫素位置原來的顏色和將要畫上去的顏色,通過某種方式混在一起,從而實現特殊的效果。假設我們需要繪製這樣乙個場景 透過紅色的玻璃去看綠色的物體,那麼可以先繪製綠色的物體,再繪製紅色玻璃。在繪製紅色玻璃的時候,利用 混合 功能,把將要繪製上去的...

OpenGL學習筆記 9 顏色混合

紅色三角形在下,綠色三角形在上 比如玻璃,假設玻璃是綠色的,那麼我們還可以看到下面的一層.即將兩種顏色混合了 glblendfunc gl src alpha,gl one minus src alpha 如下效果 綠色三角形可以看到紅色部分.這裡稱底下的紅色三角形的顏色為目標顏色 下層 綠色為源顏...