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