OpenGL學習筆記 混合

2021-05-26 22:19:55 字數 971 閱讀 1040

所謂混合:(glenable(gl_blend)),就是把兩種顏色混合在一起,通過公式或設定,達到想要的顏色效果。

只有rgba才能使用混合,顏色索引模式無法使用混合功能。

混合的前提是,要有兩個顏色(廢話)。乙個是已經畫上去的顏色(destination color,目標顏色),乙個是將要畫上去的顏色(source color源顏色)。

計算方法,真的是法克英 easy:

源顏色乘以乙個係數(源因子),目標顏色乘以乙個係數(目標因子),然後相加/相減/相乘/或者其他亂七八糟,就得到最終顏色效果。這裡我們假設是相加,那公式如下:

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

源顏色:rs, gs, bs, as,

源因子:sr, sg, sb, sa

目標顏色:rd, gd, bd, ad

目標因子:dr, dg, db, da

源因子和目標因子通過glblendfunc函式來進行設定的.

將源顏色的alpha值作為源因子,用1.0減去源顏色alpha值作為目標因子,是一種常用的方式。這時候,源顏色的alpha值相當於「不透明度」的作用。利用這一特點可以繪製出一些半透明的物體。

三維混合:

三維混合的問題:在三維空間中,如果某物體的z軸靠近觀察者,那麼它會遮住後面的物體,用openggl的做法就是,後面的乾脆不畫,這就是所謂的深度緩衝測試。這樣做無可厚非,但是,混合就哭了,所謂混合,是前面的顏色跟後面的顏色混合,現在,後面的那個東東不見了,混不下去了。

解決方法很簡單,再繪製靠近觀察者的物體的時候,想辦法取消深度緩衝測試,讓後面的物體也能畫出來。方法如下:

1. 此時讓深度緩衝區設定為唯讀(gldepthmask(gl_false))。但注意,要先畫後面的物體,再畫前面的物體

2. 此時禁用深度緩衝區。但要謹慎喲,因為注意,是完全被禁用了,所有的物體都會被畫出來,包括你本來不想畫的

OpenGL學習筆記 9 顏色混合

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

OpenGL混合模式

glblendfunc是這樣 第乙個引數指出源圖元的alpha的取值計算方法,第二個引數指出目標處的alpha的計算方法。opengl會把源顏色和目標顏色各自取出,並乘以乙個係數 源顏色乘以的係數稱為 源因子 目標顏色乘以的係數稱為 目標因子 然後相加,這樣就得到了新的顏 色。也可以不是相加,新版本...

OpenGL 混合功能

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