日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cocos2dx中的颜色混合

發布時間:2023/12/8 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cocos2dx中的颜色混合 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CCSprite有一個ccBlendFunc類型的blendFunc_結構體成員,可以用來設置描繪時的顏色混合方案。ccBlendFunc包含了一個src和一個dst,分別表示目標和源的運算因子。

????如果我們對一個Sprite使用setBlendFunc方法,如:

?????????????[Sprite setBlendFunc:(ccBlendFunc){GL_ONE,GL_ZERO} ];

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

????????源的RGBA變量:RsGsBsAs

????????目標的RGBA??RdGdBdAd

????????源的各個運算因子:??N_RsN_GsN_BsN_As

????????目標的各個運算因子:???N_RdN_GdN_BdN_Ad

混合后的RGBA為:(Rs*N_Rs+ Rd* N_RdGs*N_Gs+ Gd* N_Gd

????????????????????????????????Bs*N_Bs+ Bd* N_BdAs*N_As+ Ad* N_Ad)

???其中的運算因子包括:

?????????GL_ONE1.0

?????????GL_ZERO0.0

?????????GL_SRC_ALPHA:源的Alpha值作為因子

?????????GL_DST_ALPHA:目標Alpha作為因子

?????????GL_ONE_MINUS_SRC_ALPHA1.0減去源的Alpha值作為因子

?????????GL_ ONE_MINUS_DST_ALPHA1.0減去目標的Alpha值作為因子


常數 相關因子 融合因子結果
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)


以上均為轉載,出自http://blog.sina.com.cn/s/blog_7a2ffd5c0100xtid.html

以下為測試的組合效果


代碼:

//融合 ?taget和source都在播放動畫,且建立時無添加圖片,以下效果均在動畫中看到的效果
void mixedSprites(CCSprite* taget, CCSprite* source)
{
? ? CCRenderTexture* pRT = CCRenderTexture::create(480,320);
? ? pRT->setPosition(Point(240,160));

? ? ccBlendFunc func1 = {GL_ZERO, GL_SRC_ALPHA};
? ? ccBlendFunc func2 = {GL_DST_ALPHA, GL_ZERO};
? ??
? ? taget->setBlendFunc(func1);
? ? source->setBlendFunc(func2);

? ??

? ? pRT->begin();
? ? taget->visit();
? ? source->visit();
? ? pRT->end();
}


//func1 修改后的組合效果 ?

ccBlendFunc func1 = {GL_ZERO, GL_ZERO}; ?taget 變成一個黑色矩形

ccBlendFunc func1 = {GL_ZERO, GL_ONE}; ? taget 消失

ccBlendFunc func1 = {GL_ZERO, GL_DST_COLOR}; ??taget 原圖片透明,變成高亮區域

ccBlendFunc func1 = {GL_ZERO, GL_SRC_COLOR}; ?taget 原先透明部分黑色填充

ccBlendFunc func1 = {GL_ZERO, GL_ONE_MINUS_DST_COLOR}; ?taget ?原圖不見,成一個模糊矩形

ccBlendFunc func1 = {GL_ZERO, GL_ONE_MINUS_SRC_COLOR}; ?浮雕樣式

ccBlendFunc func1 = {GL_ZERO, GL_SRC_ALPHA}; ?原圖被扣去成透明,原先透明部分黑色填充

ccBlendFunc func1 = {GL_ZERO, GL_ONE_MINUS_SRC_ALPHA}; ?原圖變黑色,原透明部分不變。就像燈光下的影子

ccBlendFunc func1 = {GL_ZERO, GL_DST_ALPHA}; ?沒有圖片

ccBlendFunc func1 = {GL_ZERO, GL_ONE_MINUS_DST_ALPHA}; ?變成一個黑色矩形

ccBlendFunc func1 = {GL_ZERO, GL_SRC_ALPHA_SATURATE}; ?同上


ccBlendFunc func1 = {GL_ONE, GL_SRC_ALPHA_SATURATE}; ??原先透明部分黑色填充

ccBlendFunc func1 = {GL_ONE, GL_ONE_MINUS_DST_ALPHA}; ?同上

ccBlendFunc func1 = {GL_ONE, GL_DST_ALPHA}; ?原圖被蒙上一層白色

ccBlendFunc func1 = {GL_ONE, GL_ONE_MINUS_SRC_ALPHA}; ?圖片周邊出現毛刺,被羽化

ccBlendFunc func1 = {GL_ONE, GL_SRC_ALPHA}; ?原圖被蒙上一層白色,透明部分黑色填充

ccBlendFunc func1 = {GL_ONE, GL_ONE_MINUS_SRC_COLOR}; ?呈半透明,類似飄出的靈魂

ccBlendFunc func1 = {GL_ONE, GL_ONE_MINUS_DST_COLOR}; ?原先透明部分黑色填充,之后又全部被蒙上一層顏色

ccBlendFunc func1 = {GL_ONE, GL_SRC_COLOR}; ?原先透明部分黑色填充

ccBlendFunc func1 = {GL_ONE, GL_DST_COLOR}; ?圖片成半透明,顯示在一個高亮區域

ccBlendFunc func1 = {GL_ONE, GL_ONE}; ??呈半透明,類似飄出的靈魂

ccBlendFunc func1 = {GL_ONE, GL_ZERO}; ?原先透明部分黑色填充


ccBlendFunc func1 = {GL_DST_COLOR, GL_ZERO}; ?原先透明部分黑色填充,圖形成半透明

ccBlendFunc func1 = {GL_DST_COLOR, GL_ONE}; ??呈半透明,類似飄出的靈魂

ccBlendFunc func1 = {GL_DST_COLOR, GL_DST_COLOR}; ?圖片成半透明,顯示在一個高亮區域

ccBlendFunc func1 = {GL_DST_COLOR, GL_SRC_COLOR}; ?原先透明部分黑色填充

ccBlendFunc func1 = {GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR}; ?原先透明部分黑色填充,之后又全部被蒙上一層顏色

ccBlendFunc func1 = {GL_DST_COLOR, GL_ONE_MINUS_SRC_COLOR}; ?圖片消失

ccBlendFunc func1 = {GL_DST_COLOR, GL_SRC_ALPHA}; ? 原圖成半透明,底色成黑色

ccBlendFunc func1 = {GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA}; 顏色變暗

ccBlendFunc func1 = {GL_DST_COLOR, GL_DST_ALPHA}; ?呈半透明,類似飄出的靈魂

ccBlendFunc func1 = {GL_DST_COLOR, GL_ONE_MINUS_DST_ALPHA};底色黑色

ccBlendFunc func1 = {GL_DST_COLOR, GL_SRC_ALPHA_SATURATE}; 底色黑色,顏色變暗


ccBlendFunc func1 = {GL_SRC_COLOR, GL_SRC_ALPHA_SATURATE}; 底色黑色,對比度變高

ccBlendFunc func1 = {GL_SRC_COLOR, GL_ONE_MINUS_DST_ALPHA};同上

ccBlendFunc func1 = {GL_SRC_COLOR, GL_DST_ALPHA};呈半透明,類似飄出的靈魂

ccBlendFunc func1 = {GL_SRC_COLOR, GL_ONE_MINUS_SRC_ALPHA};對比度變高

ccBlendFunc func1 = {GL_SRC_COLOR, GL_SRC_ALPHA};?原圖成半透明,底色成黑色

ccBlendFunc func1 = {GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR}; 隱身效果

ccBlendFunc func1 = {GL_SRC_COLOR, GL_ONE_MINUS_DST_COLOR};?原先透明部分黑色填充,之后又全部被蒙上一層顏色

ccBlendFunc func1 = {GL_SRC_COLOR, GL_SRC_COLOR};?底色黑色,對比度變高

ccBlendFunc func1 = {GL_SRC_COLOR, GL_DST_COLOR};圖片成半透明,顯示在一個高亮區域

ccBlendFunc func1 = {GL_SRC_COLOR, GL_ONE};?隱身效果

ccBlendFunc func1 = {GL_SRC_COLOR, GL_ZERO};底色黑色,對比度變高


ccBlendFunc func1 = {GL_ONE_MINUS_DST_COLOR, GL_ZERO};原先透明部分黑色填充,之后又全部被蒙上一層顏色

ccBlendFunc func1 = {GL_ONE_MINUS_DST_COLOR, GL_ONE};?隱身效果

ccBlendFunc func1 = {GL_ONE_MINUS_DST_COLOR, GL_DST_COLOR};圖片成半透明,顯示在一個高亮區域

ccBlendFunc func1 = {GL_ONE_MINUS_DST_COLOR, GL_SRC_COLOR};底色黑色

ccBlendFunc func1 = {GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_DST_COLOR};原先透明部分黑色填充,之后又全部被蒙上一層顏色

ccBlendFunc func1 = {GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR};浮雕加隱身效果

ccBlendFunc func1 = {GL_ONE_MINUS_DST_COLOR, GL_SRC_ALPHA};原圖成半透明,底色成黑色

ccBlendFunc func1 = {GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA};顏色加深

ccBlendFunc func1 = {GL_ONE_MINUS_DST_COLOR, GL_DST_ALPHA};隱身效果

ccBlendFunc func1 = {GL_ONE_MINUS_DST_COLOR, GL_SRC_ALPHA_SATURATE};原先透明部分黑色填充,之后又全部被蒙上一層顏色


感覺人都傻了。不要問我為什么不會問,我只想說一個字“艸”


ccBlendFunc func1 = {GL_ONE_MINUS_SRC_COLOR, GL_SRC_ALPHA_SATURATE};底色黑色, 圖片變糊

ccBlendFunc func1 = {GL_ONE_MINUS_SRC_COLOR, GL_ONE_MINUS_DST_ALPHA};同上

ccBlendFunc func1 = {GL_ONE_MINUS_SRC_COLOR, GL_DST_ALPHA};隱身效果,圖片糊了

ccBlendFunc func1 = {GL_ONE_MINUS_SRC_COLOR, GL_ONE_MINUS_SRC_ALPHA};顏色變暗,圖片變糊

ccBlendFunc func1 = {GL_ONE_MINUS_SRC_COLOR, GL_SRC_ALPHA};原圖成半透明,底色成黑色,?圖片變糊

ccBlendFunc func1 = {GL_ONE_MINUS_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR};透明,加油畫風格

ccBlendFunc func1 = {GL_ONE_MINUS_SRC_COLOR, GL_ONE_MINUS_DST_COLOR};原先透明部分黑色填充,之后又全部被蒙上一層顏色,圖片變糊

ccBlendFunc func1 = {GL_ONE_MINUS_SRC_COLOR, GL_SRC_COLOR};底色成黑色,?圖片變糊

ccBlendFunc func1 = {GL_ONE_MINUS_SRC_COLOR, GL_DST_COLOR};圖片成半透明,顯示在一個高亮區域,圖片變糊

ccBlendFunc func1 = {GL_ONE_MINUS_SRC_COLOR, GL_ONE};隱身效果,圖片糊了

ccBlendFunc func1 = {GL_ONE_MINUS_SRC_COLOR, GL_ZERO};底色成黑色,之后又全部被蒙上一層顏色,圖片變糊


求大仙指點迷津,帶小人脫離這個凡塵


ccBlendFunc func1 = {GL_SRC_ALPHA, GL_ZERO};底色成黑色

ccBlendFunc func1 = {GL_SRC_ALPHA, GL_ONE};隱身效果

ccBlendFunc func1 = {GL_SRC_ALPHA, GL_DST_COLOR};圖片成半透明,顯示在一個高亮區域

ccBlendFunc func1 = {GL_SRC_ALPHA, GL_SRC_COLOR};底色成黑色,亮度高

ccBlendFunc func1 = {GL_SRC_ALPHA, GL_ONE_MINUS_DST_COLOR};底色成黑色,之后又全部被蒙上一層顏色

ccBlendFunc func1 = {GL_SRC_ALPHA, GL_ONE_MINUS_SRC_COLOR};隱身效果

ccBlendFunc func1 = {GL_SRC_ALPHA, GL_SRC_ALPHA};底色成黑色,原圖成半透明

ccBlendFunc func1 = {GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA};原圖

ccBlendFunc func1 = {GL_SRC_ALPHA, GL_DST_ALPHA};隱身效果

ccBlendFunc func1 = {GL_SRC_ALPHA, GL_ONE_MINUS_DST_ALPHA};底色成黑色

ccBlendFunc func1 = {GL_SRC_ALPHA, GL_SRC_ALPHA_SATURATE};底色成黑色


ccBlendFunc func1 = {GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA_SATURATE};黑底,只顯示圖片輪廓

ccBlendFunc func1 = {GL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_DST_ALPHA};同上

ccBlendFunc func1 = {GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA};只有圖片輪廓,有點白色像粉筆畫

ccBlendFunc func1 = {GL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA};人物全黑,像燈光下影子

ccBlendFunc func1 = {GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA};黑底,原先圖片處透明

ccBlendFunc func1 = {GL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_SRC_COLOR};浮雕

ccBlendFunc func1 = {GL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_DST_COLOR};只有圖片輪廓,有點白色像粉筆畫,再被蒙上一層顏色

ccBlendFunc func1 = {GL_ONE_MINUS_SRC_ALPHA, GL_SRC_COLOR};黑底加羽化

ccBlendFunc func1 = {GL_ONE_MINUS_SRC_ALPHA, GL_DST_COLOR};白色描邊顯示在高亮區域

ccBlendFunc func1 = {GL_ONE_MINUS_SRC_ALPHA, GL_ONE};白色描邊

ccBlendFunc func1 = {GL_ONE_MINUS_SRC_ALPHA, GL_ZERO};黑底,白色描邊


ccBlendFunc func1 = {GL_DST_ALPHA, GL_ZERO};黑底

ccBlendFunc func1 = {GL_DST_ALPHA, GL_ONE};蒙上一層白色

ccBlendFunc func1 = {GL_DST_ALPHA, GL_DST_COLOR};半透明,顯示在高亮區域

ccBlendFunc func1 = {GL_DST_ALPHA, GL_SRC_COLOR};黑底,亮度提高

ccBlendFunc func1 = {GL_DST_ALPHA, GL_ONE_MINUS_DST_COLOR};黑底,亮度提高,再蒙上一層

ccBlendFunc func1 = {GL_DST_ALPHA, GL_SRC_COLOR};黑底,亮度提高

ccBlendFunc func1 = {GL_DST_ALPHA, GL_ONE_MINUS_DST_COLOR};黑底,亮度提高,再蒙上一層

ccBlendFunc func1 = {GL_DST_ALPHA, GL_ONE_MINUS_SRC_COLOR};隱身效果

ccBlendFunc func1 = {GL_DST_ALPHA, GL_SRC_ALPHA};黑底,蒙上一層白色

ccBlendFunc func1 = {GL_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA};羽化

ccBlendFunc func1 = {GL_DST_ALPHA, GL_DST_ALPHA};隱身效果

ccBlendFunc func1 = {GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA};黑底

ccBlendFunc func1 = {GL_DST_ALPHA, GL_SRC_ALPHA_SATURATE};同上


ccBlendFunc func1 = {GL_ONE_MINUS_DST_ALPHA, GL_SRC_ALPHA_SATURATE};黑色矩形

ccBlendFunc func1 = {GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA};同上

ccBlendFunc func1 = {GL_ONE_MINUS_DST_ALPHA, GL_DST_ALPHA};消失

ccBlendFunc func1 = {GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA};圖片變黑

ccBlendFunc func1 = {GL_ONE_MINUS_DST_ALPHA, GL_SRC_ALPHA};黑底,圖片變透明

ccBlendFunc func1 = {GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_SRC_COLOR};浮雕

ccBlendFunc func1 = {GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_DST_COLOR};黑色矩形

ccBlendFunc func1 = {GL_ONE_MINUS_DST_ALPHA, GL_SRC_COLOR};黑底,亮度變暗

ccBlendFunc func1 = {GL_ONE_MINUS_DST_ALPHA, GL_DST_COLOR};高亮框,無圖

ccBlendFunc func1 = {GL_ONE_MINUS_DST_ALPHA, GL_ONE};消失

ccBlendFunc func1 = {GL_ONE_MINUS_DST_ALPHA, GL_ZERO};;黑色矩形


ccBlendFunc func1 = {GL_SRC_ALPHA_SATURATE, GL_ZERO};黑色矩形

ccBlendFunc func1 = {GL_SRC_ALPHA_SATURATE, GL_ONE};消失

ccBlendFunc func1 = {GL_SRC_ALPHA_SATURATE, GL_DST_COLOR};高亮框,無圖

ccBlendFunc func1 = {GL_SRC_ALPHA_SATURATE, GL_SRC_COLOR};黑底,亮度變暗

ccBlendFunc func1 = {GL_SRC_ALPHA_SATURATE, GL_ONE_MINUS_DST_COLOR};黑色矩形

ccBlendFunc func1 = {GL_SRC_ALPHA_SATURATE, GL_ONE_MINUS_SRC_COLOR};浮雕

ccBlendFunc func1 = {GL_SRC_ALPHA_SATURATE, GL_SRC_ALPHA};圖片變透明,留黑底

ccBlendFunc func1 = {GL_SRC_ALPHA_SATURATE, GL_ONE_MINUS_SRC_ALPHA};人物全黑,像燈光下影子

ccBlendFunc func1 = {GL_SRC_ALPHA_SATURATE, GL_DST_ALPHA};消失

ccBlendFunc func1 = {GL_SRC_ALPHA_SATURATE, GL_ONE_MINUS_DST_ALPHA};黑色矩形

ccBlendFunc func1 = {GL_SRC_ALPHA_SATURATE, GL_SRC_ALPHA_SATURATE};同上


終于結束了。

沒文化很可怕,沒智商更可怕。以上就是很好的例子。



總結

以上是生活随笔為你收集整理的cocos2dx中的颜色混合的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。