Cocos2d-x v3.X的顏色混合BlendFunc使用詳解


1、概念詳解

“顏色混合”是指兩種顏色的疊加,在新圖片渲染到屏幕上的時候,將根據新圖片的紅、綠、藍和透明度值與已加載屏幕上的圖片顏色信息重新融合。

1)源顏色:新圖片成為源顏色

2)目標顏色:屏幕上已存在顏色稱為目標顏色

3)源因子:OpenGL會把源顏色和目標顏色各自取出,並乘以一個系數,源顏色乘以的系數稱為源因子

4)目標因子:目標顏色乘以的系數成為目標因子。二者相加,即得到一個新的顏色。

2、計算公式

假設:顏色信息的四個分量入下:(紅、綠、藍、透明度)

1)源顏色:   (Rs,Gs,Bs,As)

2)目標顏色:(Rd,Gd,Bd,Ad)

3)源因子:    (Sr,Sg,Sb,Sa)

4)目標因子: (Dr,Dg,Db,Da)

則顏色的組合如下:(Rs*Sr+Rd+Dr,Gs*Sg+Gd+Dg,Bs*Sb+Bd*Db,As*Sa+Ad*Da)如果顏色某一分量超過1.0,自動截取。

3、計算因子

Cocos2d-x v3.3的顏色混合BlendFunc使用詳解 - 第1張  | 游戲開發網-最好的游戲編程開發技術網站!

4、使用方法

Sprite精靈類中存在一個設置混合方式的函數:setBlendFunc(BlendFunc),另外混合方式的屬性值是以BlendFunc結構體作為數的,定義方式為:{‘源因子’,’目標因子’},混合方式可用於精靈圖片顏色信息的混合與疊加。

1)創建混合方式

BlendFunc  cbl = {GL_SRC_ALPHA,GL_ONE};
2)靜態常量(常用混合方式)
constBlendFunc BlendFunc: ISABLE                 = {GL_ONE, GL_ZERO};
constBlendFunc BlendFunc::ALPHA_PREMULTIPLIED     = {GL_ONE, GL_ONE_MINUS_SRC_ALPHA};
constBlendFunc BlendFunc::ALPHA_NON_PREMULTIPLIED = {GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA};
constBlendFunc BlendFunc::ADDITIVE                = {GL_SRC_ALPHA, GL_ONE};
3)混合方式舉例
//目標圖片,已存在於屏幕上
    Sprite* sp1 = Sprite::create(“red.jpg”);
    sp1->setPosition(mysize/3);
    this->addChild(sp1);
//源圖片,新圖片
    Sprite* sp2 = Sprite::create(“green.jpg”);
    sp2->setPosition(mysize/3.0*2.0);
    this->addChild(sp2);
//混合方式,新圖片渲染時的混合方式
    //{ 源因子 , 混合因子 }
    BlendFunc cbl = { GL_SRC_ALPHA , GL_ONE };
    sp2->setBlendFunc(cbl);
//

4)測試

可對下面的組合進行測試

(1){GL_ONE,GL_ZERO}:效果:重疊部分綠色蓋住紅色

(2){GL_ZERO,GL_ONE}:效果:綠色消失

(3){GL_ONE,GL_ONE}:效果:顏色融合

(4){GL_SRC_ALPHA,GL_ONE}:比較常用,源顏色的透明度影響融合顏色


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM