cocos2d x 顏色混合

2021-06-23 00:30:03 字數 1830 閱讀 2281

在遊戲開發中,如果我們需要實現閃光的燈,照明彈效果等等,我麼你可以採用混合模式來實現。

如果學習過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 會把源顏...