Cocos2d中使用顏色混合:加算,減算

轉自http://blog.sina.com.cn/s/blog_7a2ffd5c0100xtid.htmlhtml

CCSprite有一個ccBlendFunc類型的blendFunc_結構體成員,能夠用來設置描繪時的顏色混合方案。ccBlendFunc包含了一個src和一個dst,分別表示目標和源的運算因子。url

    若是咱們對一個Sprite使用setBlendFunc方法,如:spa

             [Sprite setBlendFunc:(ccBlendFunc){GL_ONE,GL_ZERO} ];xml

    會以這個Sprite做爲源,Sprite所在位置的其它像素做爲目標,進行混合運算:htm

        源的RGBA變量:RsGsBsAsblog

        目標的RGBA  RdGdBdAdci

        源的各個運算因子:  N_RsN_GsN_BsN_Asget

        目標的各個運算因子:   N_RdN_GdN_BdN_Adit

混合後的RGBA爲:(Rs*N_Rs+ Rd* N_RdGs*N_Gs+ Gd* N_Gdtable

                                Bs*N_Bs+ Bd* N_BdAs*N_As+ Ad* N_Ad)

   其中的運算因子包括:

         GL_ONE1.0

         GL_ZERO0.0

         GL_SRC_ALPHA:源的Alpha值做爲因子

         GL_DST_ALPHA:目標Alpha做爲因子

         GL_ONE_MINUS_SRC_ALPHA1.0減去源的Alpha值做爲因子

         GL_ ONE_MINUS_DST_ALPHA1.0減去目標的Alpha值做爲因子

 

    咱們能夠在CCSpriteinit方法中看到,默認的狀態下使用GL_ONE,GL_ONE_MINUS_SRC_ALPHA這兩個參數,這也是咱們看到的狀況,Sprite會覆蓋下面的描繪,但若是有透明的地方,則會顯示下面的色值。讓咱們看一下說使用各個參數的效果:

    0:不改變混合,使用默認的狀況:
    
 Cocos2d中使用顏色混合:加算,減算

    1:若是設置glBlendFunc(GL_ONE,GL_ZERO) 表面徹底使用源顏色,即和不混合同樣的效果,可是若是Sprite自己有透明的地方,則透明的地方會變成黑色。由於此時不顯示目標的顏色。即便透明度爲0也沒有意義。
Cocos2d中使用顏色混合:加算,減算

    2:若是設置glBlendFunc(GL_ZERO, GL_ONE),表示不使用源顏色,那麼該Sprite便不被畫出來。
  Cocos2d中使用顏色混合:加算,減算

    3:使用ALPHA相關的因子,會根據透明度來計算,好比透明度高的顏色佔較大比重等。如默認狀況。

 附:

常數 相關因子 融合因子結果
GL_ZERO 源因子或目的因子 (0,0,0,0)
GL_ONE 源因子或目的因子 (1,1,1,1)
GL_DST_COLOR 源因子 (Rd,Gd,Bd,Ad)
GL_SRC_COLOR 目的因子 (Rs,Gs,Bs,As)
GL_ONE_MINUS_DST_COLOR 源因子 (1,1,1,1)-(Rd,Gd,Bd,Ad)
GL_ONE_MINUS_SRC_COLOR 目的因子 (1,1,1,1)-(Rs,Gs,Bs,As)
GL_SRC_ALPHA 源因子或目的因子 (As,As,As,As)
GL_ONE_MINUS_SRC_ALPHA 源因子或目的因子 (1,1,1,1)-(As,As,As,As)
GL_DST_ALPHA 源因子或目的因子 (Ad,Ad,Ad,Ad)
GL_ONE_MINUS_DST_ALPHA 源因子或目的因子 (1,1,1,1)-(Ad,Ad,Ad,Ad)
GL_SRC_ALPHA_SATURATE 源因子 (f,f,f,1); f=min(As,1-Ad)
相關文章
相關標籤/搜索