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