關於顏色混合

2021-06-16 20:02:00 字數 1973 閱讀 9936

ccsprite有乙個ccblendfunc型別的blendfunc_結構體成員,可以用來設定描繪時的顏色混合方案。ccblendfunc包含了乙個src和乙個dst,分別表示目標和源的運算因子。

如果我們對乙個sprite使用setblendfunc方法,如:

[spritesetblendfunc:(ccblendfunc) ];

會以這個sprite作為源,sprite所在位置的其它畫素作為目標,進行混合運算:

源的rgba變數:rs,gs,bs,as;

目標的rgba: 

rd,gd,bd,ad;

源的各個運算因子: n_rs,n_gs,n_bs,n_as;

目標的各個運算因子: 

n_rd,n_gd,n_bd,n_ad;

混合後的rgba為:(rs*n_rs+ rd* n_rd,gs*n_gs+ gd* n_gd,

bs*n_bs+ bd* n_bd,as*n_as+ ad* n_ad)

其中的運算因子包括:

gl_one:1.0

gl_zero:0.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值作為因子

我們可以在ccsprite的init方法中看到,預設的狀態下使用gl_one,gl_one_minus_src_alpha這兩個引數,這也是我們看到的情況,sprite會覆蓋下面的描繪,但如果有透明的地方,則會顯示下面的色值。讓我們看一下說使用各個引數的效果:

0:不改變混合,使用預設的情況:

1:如果設定glblendfunc(gl_one,gl_zero),表面完全使用源顏色,即和不混合一樣的效果,但是如果sprite本身有透明的地方,則透明的地方會變成黑色。因為此時不顯示目標的顏色。即使透明度為0也沒有意義。

2:如果設定glblendfunc(gl_zero, gl_one),表示不使用源顏色,那麼該sprite便不被畫出來。

附:常數

相關因子

融合因子結果

gl_zero

源因子或目的因子

(0,0,0,0)

gl_one

源因子或目的因子

(1,1,1,1)

gl_dst_color

源因子(rd,gd,bd,ad)

gl_src_color

目的因子

(rs,gs,bs,as)

gl_one_minus_dst_color

源因子(1,1,1,1)-(rd,gd,bd,ad)

gl_one_minus_src_color

目的因子

(1,1,1,1)-(rs,gs,bs,as)

gl_src_alpha

源因子或目的因子

(as,as,as,as)

gl_one_minus_src_alpha

源因子或目的因子

(1,1,1,1)-(as,as,as,as)

gl_dst_alpha

源因子或目的因子

(ad,ad,ad,ad)

gl_one_minus_dst_alpha

源因子或目的因子

(1,1,1,1)-(ad,ad,ad,ad)

gl_src_alpha_saturate

源因子(f,f,f,1); f=min(as,1-ad)

關於顏色混合

飛機大戰新增子彈的時候,子彈總是有背景的黑色,可以採用顏色混合的方法解決。在子彈初始化的時候 ccblendfunc cbl this setblendfunc cbl ccblendfunc 有兩個引數,第乙個引數代表源 也就是子彈 的顏色,第二個引數代表目標 也就是地圖背景 的顏色。1.glbl...

opengl顏色混合

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

OpenGL顏色混合 glBlendFunc

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