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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

cocos2d-x 调色

發布時間:2024/4/13 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cocos2d-x 调色 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在游戲開發。我們須要實現閃光的燈。照明彈效果等等,我么你能夠採用混合模式來實現。

假設學習過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 plaincopy
  • ??
  • //?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?=?{GL_DST_COLOR,?GL_ONE};??
  • lightSprite->setBlendFunc(cbl);??
  • this->addChild(lightSprite,?2);??
  • 用到的light.png:-><-(透明的)

    看到,這個小人的光光頭有種被點亮的感覺

    使用混色,加動畫,你可以實現一些非常酷的效果。

    總結

    以上是生活随笔為你收集整理的cocos2d-x 调色的全部內容,希望文章能夠幫你解決所遇到的問題。

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