CCSprite有一个ccBlendFunc类型的blendFunc_结构体成员,可以用来设置描绘时的颜色混合方案。ccBlendFunc包含了一个src和一个dst,分别表示目标和源的运算因子。
混合后的RGBA为:(Rs*N_Rs+ Rd* N_Rd,Gs*N_Gs+ Gd* N_Gd,
附
常数 | 相关因子 | 融合因子结果 |
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) |
以上均为转载,出自http://blog.sina.com.cn/s/blog_7a2ffd5c0100xtid.html
以下为测试的组合效果
代码:
//融合 taget和source都在播放动画,且建立时无添加图片,以下效果均在动画中看到的效果
void mixedSprites(CCSprite* taget, CCSprite* source)
{
CCRenderTexture* pRT = CCRenderTexture::create(480,320);
pRT->setPosition(Point(240,160));
ccBlendFunc func1 = {GL_ZERO, GL_SRC_ALPHA};
ccBlendFunc func2 = {GL_DST_ALPHA, GL_ZERO};
taget->setBlendFunc(func1);
source->setBlendFunc(func2);
pRT->begin();
taget->visit();
source->visit();
pRT->end();
}
//func1 修改后的组合效果
ccBlendFunc func1 = {GL_ZERO, GL_ZERO}; taget 变成一个黑色矩形
ccBlendFunc func1 = {GL_ZERO, GL_ONE}; taget 消失
ccBlendFunc func1 = {GL_ZERO, GL_DST_COLOR}; taget 原图片透明,变成高亮区域
ccBlendFunc func1 = {GL_ZERO, GL_SRC_COLOR}; taget 原先透明部分黑色填充
ccBlendFunc func1 = {GL_ZERO, GL_ONE_MINUS_DST_COLOR}; taget 原图不见,成一个模糊矩形
ccBlendFunc func1 = {GL_ZERO, GL_ONE_MINUS_SRC_COLOR}; 浮雕样式
ccBlendFunc func1 = {GL_ZERO, GL_SRC_ALPHA}; 原图被扣去成透明,原先透明部分黑色填充
ccBlendFunc func1 = {GL_ZERO, GL_ONE_MINUS_SRC_ALPHA}; 原图变黑色,原透明部分不变。就像灯光下的影子
ccBlendFunc func1 = {GL_ZERO, GL_DST_ALPHA}; 没有图片
ccBlendFunc func1 = {GL_ZERO, GL_ONE_MINUS_DST_ALPHA}; 变成一个黑色矩形
ccBlendFunc func1 = {GL_ZERO, GL_SRC_ALPHA_SATURATE}; 同上
ccBlendFunc func1 = {GL_ONE, GL_SRC_ALPHA_SATURATE}; 原先透明部分黑色填充
ccBlendFunc
func1 = {GL_ONE, GL_ONE_MINUS_DST_ALPHA}; 同上
ccBlendFunc
func1 = {GL_ONE, GL_DST_ALPHA}; 原图被蒙上一层白色
ccBlendFunc
func1 = {GL_ONE, GL_ONE_MINUS_SRC_ALPHA}; 图片周边出现毛刺,被羽化
ccBlendFunc
func1 = {GL_ONE, GL_SRC_ALPHA}; 原图被蒙上一层白色,透明部分黑色填充
ccBlendFunc
func1 = {GL_ONE, GL_ONE_MINUS_SRC_COLOR}; 呈半透明,类似飘出的灵魂
ccBlendFunc func1 = {GL_ONE, GL_ONE_MINUS_DST_COLOR}; 原先透明部分黑色填充,之后又全部被蒙上一层颜色
ccBlendFunc func1 = {GL_ONE, GL_SRC_COLOR}; 原先透明部分黑色填充
ccBlendFunc func1 = {GL_ONE, GL_DST_COLOR}; 图片成半透明,显示在一个高亮区域
ccBlendFunc func1 = {GL_ONE, GL_ONE}; 呈半透明,类似飘出的灵魂
ccBlendFunc
func1 = {GL_ONE, GL_ZERO}; 原先透明部分黑色填充
ccBlendFunc
func1 = {GL_DST_COLOR, GL_ZERO}; 原先透明部分黑色填充,图形成半透明
ccBlendFunc
func1 = {GL_DST_COLOR, GL_ONE}; 呈半透明,类似飘出的灵魂
ccBlendFunc
func1 = {GL_DST_COLOR, GL_DST_COLOR}; 图片成半透明,显示在一个高亮区域
ccBlendFunc
func1 = {GL_DST_COLOR, GL_SRC_COLOR}; 原先透明部分黑色填充
ccBlendFunc
func1 = {GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR}; 原先透明部分黑色填充,之后又全部被蒙上一层颜色
ccBlendFunc
func1 = {GL_DST_COLOR, GL_ONE_MINUS_SRC_COLOR}; 图片消失
ccBlendFunc
func1 = {GL_DST_COLOR, GL_SRC_ALPHA}; 原图成半透明,底色成黑色
ccBlendFunc
func1 = {GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA}; 颜色变暗
ccBlendFunc
func1 = {GL_DST_COLOR, GL_DST_ALPHA}; 呈半透明,类似飘出的灵魂
ccBlendFunc
func1 = {GL_DST_COLOR, GL_ONE_MINUS_DST_ALPHA};底色黑色
ccBlendFunc
func1 = {GL_DST_COLOR, GL_SRC_ALPHA_SATURATE}; 底色黑色,颜色变暗
ccBlendFunc
func1 = {GL_SRC_COLOR, GL_SRC_ALPHA_SATURATE}; 底色黑色,对比度变高
ccBlendFunc
func1 = {GL_SRC_COLOR, GL_ONE_MINUS_DST_ALPHA};同上
ccBlendFunc
func1 = {GL_SRC_COLOR, GL_DST_ALPHA};呈半透明,类似飘出的灵魂
ccBlendFunc
func1 = {GL_SRC_COLOR, GL_ONE_MINUS_SRC_ALPHA};对比度变高
ccBlendFunc
func1 = {GL_SRC_COLOR, GL_SRC_ALPHA}; 原图成半透明,底色成黑色
ccBlendFunc
func1 = {GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR}; 隐身效果
ccBlendFunc
func1 = {GL_SRC_COLOR, GL_ONE_MINUS_DST_COLOR}; 原先透明部分黑色填充,之后又全部被蒙上一层颜色
ccBlendFunc
func1 = {GL_SRC_COLOR, GL_SRC_COLOR}; 底色黑色,对比度变高
ccBlendFunc
func1 = {GL_SRC_COLOR, GL_DST_COLOR};图片成半透明,显示在一个高亮区域
ccBlendFunc
func1 = {GL_SRC_COLOR, GL_ONE}; 隐身效果
ccBlendFunc
func1 = {GL_SRC_COLOR, GL_ZERO};底色黑色,对比度变高
ccBlendFunc
func1 = {GL_ONE_MINUS_DST_COLOR, GL_ZERO};原先透明部分黑色填充,之后又全部被蒙上一层颜色
ccBlendFunc
func1 = {GL_ONE_MINUS_DST_COLOR, GL_ONE}; 隐身效果
ccBlendFunc
func1 = {GL_ONE_MINUS_DST_COLOR, GL_DST_COLOR};图片成半透明,显示在一个高亮区域
ccBlendFunc
func1 = {GL_ONE_MINUS_DST_COLOR, GL_SRC_COLOR};底色黑色
ccBlendFunc
func1 = {GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_DST_COLOR};原先透明部分黑色填充,之后又全部被蒙上一层颜色
ccBlendFunc
func1 = {GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR};浮雕加隐身效果
ccBlendFunc
func1 = {GL_ONE_MINUS_DST_COLOR, GL_SRC_ALPHA};原图成半透明,底色成黑色
ccBlendFunc
func1 = {GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA};颜色加深
ccBlendFunc
func1 = {GL_ONE_MINUS_DST_COLOR, GL_DST_ALPHA};隐身效果
ccBlendFunc
func1 = {GL_ONE_MINUS_DST_COLOR, GL_SRC_ALPHA_SATURATE};原先透明部分黑色填充,之后又全部被蒙上一层颜色
感觉人都傻了。不要问我为什么不会问,我只想说一个字“艹”
ccBlendFunc
func1 = {GL_ONE_MINUS_SRC_COLOR, GL_SRC_ALPHA_SATURATE};底色黑色, 图片变糊
ccBlendFunc
func1 = {GL_ONE_MINUS_SRC_COLOR, GL_ONE_MINUS_DST_ALPHA};同上
ccBlendFunc
func1 = {GL_ONE_MINUS_SRC_COLOR, GL_DST_ALPHA};隐身效果,图片糊了
ccBlendFunc
func1 = {GL_ONE_MINUS_SRC_COLOR, GL_ONE_MINUS_SRC_ALPHA};颜色变暗,图片变糊
ccBlendFunc
func1 = {GL_ONE_MINUS_SRC_COLOR, GL_SRC_ALPHA};原图成半透明,底色成黑色, 图片变糊
ccBlendFunc
func1 = {GL_ONE_MINUS_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR};透明,加油画风格
ccBlendFunc
func1 = {GL_ONE_MINUS_SRC_COLOR, GL_ONE_MINUS_DST_COLOR};原先透明部分黑色填充,之后又全部被蒙上一层颜色,图片变糊
ccBlendFunc
func1 = {GL_ONE_MINUS_SRC_COLOR, GL_SRC_COLOR};底色成黑色, 图片变糊
ccBlendFunc
func1 = {GL_ONE_MINUS_SRC_COLOR, GL_DST_COLOR};图片成半透明,显示在一个高亮区域,图片变糊
ccBlendFunc
func1 = {GL_ONE_MINUS_SRC_COLOR, GL_ONE};隐身效果,图片糊了
ccBlendFunc
func1 = {GL_ONE_MINUS_SRC_COLOR, GL_ZERO};底色成黑色,之后又全部被蒙上一层颜色,图片变糊
求大仙指点迷津,带小人脱离这个凡尘
ccBlendFunc func1 = {GL_SRC_ALPHA, GL_ZERO};底色成黑色
ccBlendFunc func1 = {GL_SRC_ALPHA, GL_ONE};隐身效果
ccBlendFunc func1 = {GL_SRC_ALPHA, GL_DST_COLOR};图片成半透明,显示在一个高亮区域
ccBlendFunc
func1 = {GL_SRC_ALPHA, GL_SRC_COLOR};底色成黑色,亮度高
ccBlendFunc
func1 = {GL_SRC_ALPHA, GL_ONE_MINUS_DST_COLOR};底色成黑色,之后又全部被蒙上一层颜色
ccBlendFunc
func1 = {GL_SRC_ALPHA, GL_ONE_MINUS_SRC_COLOR};隐身效果
ccBlendFunc
func1 = {GL_SRC_ALPHA, GL_SRC_ALPHA};底色成黑色,原图成半透明
ccBlendFunc
func1 = {GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA};原图
ccBlendFunc
func1 = {GL_SRC_ALPHA, GL_DST_ALPHA};隐身效果
ccBlendFunc
func1 = {GL_SRC_ALPHA, GL_ONE_MINUS_DST_ALPHA};底色成黑色
ccBlendFunc
func1 = {GL_SRC_ALPHA, GL_SRC_ALPHA_SATURATE};底色成黑色
ccBlendFunc
func1 = {GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA_SATURATE};黑底,只显示图片轮廓
ccBlendFunc
func1 = {GL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_DST_ALPHA};同上
ccBlendFunc
func1 = {GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA};只有图片轮廓,有点白色像粉笔画
ccBlendFunc
func1 = {GL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA};人物全黑,像灯光下影子
ccBlendFunc
func1 = {GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA};黑底,原先图片处透明
ccBlendFunc
func1 = {GL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_SRC_COLOR};浮雕
ccBlendFunc
func1 = {GL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_DST_COLOR};只有图片轮廓,有点白色像粉笔画,再被蒙上一层颜色
ccBlendFunc
func1 = {GL_ONE_MINUS_SRC_ALPHA, GL_SRC_COLOR};黑底加羽化
ccBlendFunc
func1 = {GL_ONE_MINUS_SRC_ALPHA, GL_DST_COLOR};白色描边显示在高亮区域
ccBlendFunc
func1 = {GL_ONE_MINUS_SRC_ALPHA, GL_ONE};白色描边
ccBlendFunc
func1 = {GL_ONE_MINUS_SRC_ALPHA, GL_ZERO};黑底,白色描边
ccBlendFunc
func1 = {GL_DST_ALPHA, GL_ZERO};黑底
ccBlendFunc
func1 = {GL_DST_ALPHA, GL_ONE};蒙上一层白色
ccBlendFunc
func1 = {GL_DST_ALPHA, GL_DST_COLOR};半透明,显示在高亮区域
ccBlendFunc
func1 = {GL_DST_ALPHA, GL_SRC_COLOR};黑底,亮度提高
ccBlendFunc
func1 = {GL_DST_ALPHA, GL_ONE_MINUS_DST_COLOR};黑底,亮度提高,再蒙上一层
ccBlendFunc
func1 = {GL_DST_ALPHA, GL_SRC_COLOR};黑底,亮度提高
ccBlendFunc
func1 = {GL_DST_ALPHA, GL_ONE_MINUS_DST_COLOR};黑底,亮度提高,再蒙上一层
ccBlendFunc
func1 = {GL_DST_ALPHA, GL_ONE_MINUS_SRC_COLOR};隐身效果
ccBlendFunc
func1 = {GL_DST_ALPHA, GL_SRC_ALPHA};黑底,蒙上一层白色
ccBlendFunc
func1 = {GL_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA};羽化
ccBlendFunc
func1 = {GL_DST_ALPHA, GL_DST_ALPHA};隐身效果
ccBlendFunc
func1 = {GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA};黑底
ccBlendFunc
func1 = {GL_DST_ALPHA, GL_SRC_ALPHA_SATURATE};同上
ccBlendFunc
func1 = {GL_ONE_MINUS_DST_ALPHA, GL_SRC_ALPHA_SATURATE};黑色矩形
ccBlendFunc
func1 = {GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA};同上
ccBlendFunc
func1 = {GL_ONE_MINUS_DST_ALPHA, GL_DST_ALPHA};消失
ccBlendFunc
func1 = {GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA};图片变黑
ccBlendFunc
func1 = {GL_ONE_MINUS_DST_ALPHA, GL_SRC_ALPHA};黑底,图片变透明
ccBlendFunc
func1 = {GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_SRC_COLOR};浮雕
ccBlendFunc
func1 = {GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_DST_COLOR};黑色矩形
ccBlendFunc
func1 = {GL_ONE_MINUS_DST_ALPHA, GL_SRC_COLOR};黑底,亮度变暗
ccBlendFunc
func1 = {GL_ONE_MINUS_DST_ALPHA, GL_DST_COLOR};高亮框,无图
ccBlendFunc
func1 = {GL_ONE_MINUS_DST_ALPHA, GL_ONE};消失
ccBlendFunc
func1 = {GL_ONE_MINUS_DST_ALPHA, GL_ZERO};;黑色矩形
ccBlendFunc
func1 = {GL_SRC_ALPHA_SATURATE, GL_ZERO};黑色矩形
ccBlendFunc
func1 = {GL_SRC_ALPHA_SATURATE, GL_ONE};消失
ccBlendFunc
func1 = {GL_SRC_ALPHA_SATURATE, GL_DST_COLOR};高亮框,无图
ccBlendFunc
func1 = {GL_SRC_ALPHA_SATURATE, GL_SRC_COLOR};黑底,亮度变暗
ccBlendFunc
func1 = {GL_SRC_ALPHA_SATURATE, GL_ONE_MINUS_DST_COLOR};黑色矩形
ccBlendFunc
func1 = {GL_SRC_ALPHA_SATURATE, GL_ONE_MINUS_SRC_COLOR};浮雕
ccBlendFunc
func1 = {GL_SRC_ALPHA_SATURATE, GL_SRC_ALPHA};图片变透明,留黑底
ccBlendFunc
func1 = {GL_SRC_ALPHA_SATURATE, GL_ONE_MINUS_SRC_ALPHA};人物全黑,像灯光下影子
ccBlendFunc
func1 = {GL_SRC_ALPHA_SATURATE, GL_DST_ALPHA};消失
ccBlendFunc
func1 = {GL_SRC_ALPHA_SATURATE, GL_ONE_MINUS_DST_ALPHA};黑色矩形
ccBlendFunc
func1 = {GL_SRC_ALPHA_SATURATE, GL_SRC_ALPHA_SATURATE};同上
终于结束了。
没文化很可怕,没智商更可怕。以上就是很好的例子。