在遊戲開發中,如果我們需要實現閃光的燈,照明彈效果等等,我麼你可以採用混合模式來實現。
如果學習過opengl(es),就知道裡面使用glblendfunc函式實現的。在cocos2d-x裡肯定也有,對於精靈,可以使用mysprite->setblendfunc()來現。
什麼是顏色混合?
簡單來說就是將rgba中的a,經行操作處理。具體一點,就是把某一畫素位置原來的顏色和將要畫上去的顏色,通過某種方式混在一起,從而實現特殊的效果。
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)
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值來作為因子。
下面舉乙個例子:
[cpp]view plain
copy
// background
ccsprite *hellosprite = ccsprite::create("man.png"
);
hellosprite->setposition(ccp(winsize.width/2, winsize.height/2));
this
->addchild(hellosprite);
// add your sprite
ccsprite *lightsprite = ccsprite::create("light.png"
);
lightsprite->setcolor(ccwhite);
lightsprite->setscale(4.0f);
lightsprite->setposition(ccp(winsize.width/2, winsize.height/2+40));
ccblendfunc cbl = ;
lightsprite->setblendfunc(cbl);
this
->addchild(lightsprite, 2);
用到的light.png:->
看到,這個小人的光禿禿的頭有種被照亮的感覺
使用顏色混合,加上動畫,可以實現一些很酷的效果。
cocos2dx系列 顏色混合BlendFunc
一 概念 混合 是指兩種顏色的疊加方式。在新將要渲染畫到螢幕上的時候,將用在新中的紅 綠 藍和透明度資訊,與螢幕上已經存在的顏色資訊相融合。說的具體一點,就是把某一畫素位置上原來的顏色和將要畫上去的顏色,通過某種方式混在一起,從而實現特殊的效果。新顏色被稱作 源顏色 而螢幕上已存在的顏色則被稱作 目...
cocos2d x顏色混合模式完成光照效果
使用cocosd x3.2的顏色混合功能和裁剪功能完成光照效果,簡單易用,效果圖如下 底圖,光照圖 一般是有透明度的白色圖 光移動的時間,迴圈次數 node helloworld createflashnode const std string spname,const std string spl...
cocos2d x 混合模式
在opengl es 使用glblendfunc函式實現實現混合模式,cocos2d x中可以使用blendfunc。什麼是顏色混合?簡單來說就是將rgba中的a,經行操作處理。具體一點,就是把某一畫素位置原來的顏色和將要畫上去的顏色,通過某種方式混在一起,從而實現特殊的效果。opengl 會把源顏...