1. 程式人生 > >Cocos2d-x v3.X的顏色混合BlendFunc使用詳解(轉載)

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}:比較常用,源顏色的透明度影響融合顏色