cocos2d x 混合模式

2021-10-04 02:59:18 字數 1515 閱讀 2611

在opengl(es),使用glblendfunc函式實現實現混合模式,cocos2d-x中可以使用blendfunc。

什麼是顏色混合?

簡單來說就是將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值來作為因子。

使用示例:

sprite *hellosprite = sprite::create("

man.png

");

hellosprite->setposition(vec2(visiblesize.width/2, visiblesize.height/2

));

this->addchild(hellosprite);

sprite *lightsprite = sprite::create("

light.png

");

lightsprite->setcolor(color3b::white);

lightsprite->setscale(4.0f

);

lightsprite->setposition(ccp(visiblesize.width/2, visiblesize.height/2+40

));

blendfunc cbl =;

lightsprite->setblendfunc(cbl);

this->addchild(lightsprite, 2);

cocos2d x 顏色混合

在遊戲開發中,如果我們需要實現閃光的燈,照明彈效果等等,我麼你可以採用混合模式來實現。如果學習過opengl es 就知道裡面使用glblendfunc函式實現的。在cocos2d x裡肯定也有,對於精靈,可以使用mysprite setblendfunc 來現。什麼是顏色混合?簡單來說就是將rgb...

cocos2d x顏色混合模式完成光照效果

使用cocosd x3.2的顏色混合功能和裁剪功能完成光照效果,簡單易用,效果圖如下 底圖,光照圖 一般是有透明度的白色圖 光移動的時間,迴圈次數 node helloworld createflashnode const std string spname,const std string spl...

Cocos2d x的設計模式

單例模式 單例模式的定義是產生乙個類的唯一例項,但js本身就是一種 無類 語言,很多講就是設計模式的文章把 當成乙個單例來使用也勉強說的通,因為js生成物件的方式有很多種。簡單工廠模式 簡單工廠模式是由乙個方法來決定到底要建立哪個類的例項,而這些例項經常都擁有相同的介面,這種模式主要用於在所例項化的...