Cocos2d中使用颜色混合:加算,减算
2013-11-08 23:03
232 查看
CCSprite有一个ccBlendFunc类型的blendFunc_结构体成员,可以用来设置描绘时的颜色混合方案。ccBlendFunc包含了一个src和一个dst,分别表示目标和源的运算因子。
如果我们对一个Sprite使用setBlendFunc方法,如:
[Sprite setBlendFunc:(ccBlendFunc){GL_ONE,GL_ZERO} ];
会以这个Sprite作为源,Sprite所在位置的其它像素作为目标,进行混合运算:
源的RGBA变量:Rs,Gs,Bs,As;
目标的RGBA: Rd,Gd,Bd,Ad;
源的各个运算因子: N_Rs,N_Gs,N_Bs,N_As;
目标的各个运算因子: N_Rd,N_Gd,N_Bd,N_Ad;
混合后的RGBA为:(Rs*N_Rs+
Rd* N_Rd,Gs*N_Gs+ Gd* N_Gd,
Bs*N_Bs+ Bd* N_Bd,As*N_As+
Ad* N_Ad)
其中的运算因子包括:
GL_ONE:1.0
GL_ZERO:0.0
GL_SRC_ALPHA:源的Alpha值作为因子
GL_DST_ALPHA:目标Alpha作为因子
GL_ONE_MINUS_SRC_ALPHA:1.0减去源的Alpha值作为因子
GL_ ONE_MINUS_DST_ALPHA:1.0减去目标的Alpha值作为因子
我们可以在CCSprite的init方法中看到,默认的状态下使用GL_ONE,GL_ONE_MINUS_SRC_ALPHA这两个参数,这也是我们看到的情况,Sprite会覆盖下面的描绘,但如果有透明的地方,则会显示下面的色值。让我们看一下说使用各个参数的效果:
0:不改变混合,使用默认的情况:
1:如果设置glBlendFunc(GL_ONE,GL_ZERO), 表面完全使用源颜色,即和不混合一样的效果,但是如果Sprite本身有透明的地方,则透明的地方会变成黑色。因为此时不显示目标的颜色。即使透明度为0也没有意义。
2:如果设置glBlendFunc(GL_ZERO, GL_ONE),表示不使用源颜色,那么该Sprite便不被画出来。
3:使用ALPHA相关的因子,会根据透明度来计算,比如透明度高的颜色占较大比重等。如默认情况。
附:
如果我们对一个Sprite使用setBlendFunc方法,如:
[Sprite setBlendFunc:(ccBlendFunc){GL_ONE,GL_ZERO} ];
会以这个Sprite作为源,Sprite所在位置的其它像素作为目标,进行混合运算:
源的RGBA变量:Rs,Gs,Bs,As;
目标的RGBA: Rd,Gd,Bd,Ad;
源的各个运算因子: N_Rs,N_Gs,N_Bs,N_As;
目标的各个运算因子: N_Rd,N_Gd,N_Bd,N_Ad;
混合后的RGBA为:(Rs*N_Rs+
Rd* N_Rd,Gs*N_Gs+ Gd* N_Gd,
Bs*N_Bs+ Bd* N_Bd,As*N_As+
Ad* N_Ad)
其中的运算因子包括:
GL_ONE:1.0
GL_ZERO:0.0
GL_SRC_ALPHA:源的Alpha值作为因子
GL_DST_ALPHA:目标Alpha作为因子
GL_ONE_MINUS_SRC_ALPHA:1.0减去源的Alpha值作为因子
GL_ ONE_MINUS_DST_ALPHA:1.0减去目标的Alpha值作为因子
我们可以在CCSprite的init方法中看到,默认的状态下使用GL_ONE,GL_ONE_MINUS_SRC_ALPHA这两个参数,这也是我们看到的情况,Sprite会覆盖下面的描绘,但如果有透明的地方,则会显示下面的色值。让我们看一下说使用各个参数的效果:
0:不改变混合,使用默认的情况:
1:如果设置glBlendFunc(GL_ONE,GL_ZERO), 表面完全使用源颜色,即和不混合一样的效果,但是如果Sprite本身有透明的地方,则透明的地方会变成黑色。因为此时不显示目标的颜色。即使透明度为0也没有意义。
2:如果设置glBlendFunc(GL_ZERO, GL_ONE),表示不使用源颜色,那么该Sprite便不被画出来。
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 |
相关文章推荐
- Cocos2d-x v3.X的颜色混合BlendFunc使用详解
- Cocos2d中使用颜色混合:加算,减算
- cocos2d 颜色混合 ccBlendFunc 使用方法
- Cocos2d中使用颜色混合:加算,减算
- Cocos2d中使用颜色混合:加算,减算
- 【cocos2d-x 2.x 学习与应用总结】14: 自定义shader绘制混合颜色的矩形
- Cocos2d-x中,使用Image类获取图片某一点的颜色
- cocos2d-x 如何使用Visual Studio 2010和xcode 4混合编写手机游戏
- cocos2dx Sprite setBlendFunc 使用颜色混合:加算,减算
- Cocos2d-x中颜色选择盘类CCControlColourPicker的使用
- cocos2d-x 如何使用Visual Studio 2010和xcode 4混合编写手机游戏
- cocos2d-x颜色混合模式完成光照效果
- cocos2d-x颜色混合模式完成光照效果
- cocos2d-x 颜色混合
- 使用JNI进行混合编程:在C/C++中调用Java代码--------------------cocos2d-x 3.0正式版本(7.5)
- cocos2d-x ccsprite 使用 shader生成自己想要的颜色的图片
- 使用Properties和uniform来对着色器进行输入 附带介绍颜色插值混合的方法
- cocos2d-x混合BlendFunc的使用
- 留一个神python代码——混合使用wxpython和pyglet(cocos2d编辑器)
- Cocos2d-x3.3的的颜色混合BlendFunc