中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

cocos2dx[3.2](15)——顏色混合BlendFunc

發布時間:2020-06-25 23:34:30 來源:網絡 閱讀:23124 作者:shahdza 欄目:開發技術

    本節參考:http://goldlion.blog.51cto.com/4127613/767801


1、概念

    “混合”是指兩種顏色的疊加方式。在新圖片將要渲染畫到屏幕上的時候,將用在新圖片中的紅、綠、藍和透明度信息,與屏幕上已經存在的圖片顏色信息相融合。

    說的具體一點,就是把某一像素位置上原來的顏色和將要畫上去的顏色,通過某種方式混在一起,從而實現特殊的效果。

    新圖片顏色被稱作“源顏色”,而屏幕上已存在的圖片顏色則被稱作“目標顏色”

    OpenGL會把源顏色和目標顏色各自取出,并乘以一個系數(源顏色乘以的系數稱為“源因子”,目標顏色乘以的系數稱為“目標因子”),然后相加,這樣就得到了新的顏色。


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,則它會被自動截取為1.0,不需要考慮越界的問題。 


3、混合因子

混合方式解釋因子值
GL_ZERO全部不用(0 , 0 , 0 , 0)
GL_ONE全部使用(1 , 1 , 1 , 1)
GL_SRC_COLOR使用源顏色(Rs , Gs , Bs , As)
GL_DST_COLOR使用目標顏色(Rd , Gd , Bd , Ad)
GL_ONE_MINUS_SRC_COLOR減去源顏色(1-Rs , 1-Gs , 1-Bs , 1-As)
GL_ONE_MINUS_DST_COLOR減去目標顏色(1-Rd , 1-Gd , 1-Bd , 1-Ad)
GL_SRC_ALPHA使用源顏色的透明度(As , As , As , As)
GL_DST_ALPHA使用目標顏色的透明度(Ad , Ad , Ad , Ad)
GL_ONE_MINUS_SRC_ALPHA減去源顏色的透明度(1-As , 1-As , 1-As , 1-As)
GL_ONE_MINUS_DST_ALPHA減去目標顏色的透明度(1-Ad , 1-Ad , 1-Ad , 1-Ad)


4、使用方法

    Sprite精靈類中有一個設置混合方式的函數setBlendFunc(BlendFunc),另外混合方式的屬性值是以BlendFunc結構體作為數據的,定義方式為:{ '源因子' , '目標因子' }

    混合方式可用于精靈紋理圖片顏色信息的混合與疊加。


    4.1、混合方式創建

//
	//{ '源因子' , '目標因子' }
	BlendFunc cbl = { GL_SRC_ALPHA , GL_ONE };
//


    4.2、靜態常量(常用混合方式)

//
	const BlendFunc BlendFunc::DISABLE                 = {GL_ONE, GL_ZERO};
	const BlendFunc BlendFunc::ALPHA_PREMULTIPLIED     = {GL_ONE, GL_ONE_MINUS_SRC_ALPHA};
	const BlendFunc BlendFunc::ALPHA_NON_PREMULTIPLIED = {GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA};
	const BlendFunc BlendFunc::ADDITIVE                = {GL_SRC_ALPHA, GL_ONE};
//


    4.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.4、如下圖所示

cocos2dx[3.2](15)——顏色混合BlendFunc


5、混合方式舉例

    (1){ GL_ONE , GL_ZERO }

cocos2dx[3.2](15)——顏色混合BlendFunc


    (2){ GL_ZERO, GL_ONE }

cocos2dx[3.2](15)——顏色混合BlendFunc


    (3){ GL_ONE, GL_ONE }

cocos2dx[3.2](15)——顏色混合BlendFunc


    (4){ GL_SRC_ALPHA , GL_ONE } (比較常用)

        和上圖一樣?是因為“源顏色”的透明度為:1。

cocos2dx[3.2](15)——顏色混合BlendFunc



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

玛多县| 寻甸| 景宁| 巴塘县| 周宁县| 金湖县| 慈溪市| 东海县| 永新县| 吉安市| 浮山县| 托里县| 武功县| 潜江市| 宜宾县| 阿拉善右旗| 舒城县| 武定县| 莫力| 阿图什市| 东至县| 启东市| 金寨县| 修水县| 温州市| 德清县| 台前县| 景德镇市| 定州市| 亳州市| 祁门县| 河西区| 榆社县| 图木舒克市| 山阳县| 揭东县| 齐齐哈尔市| 故城县| 绥阳县| 扎鲁特旗| 延川县|