cocos2dx Sprite setBlendFunc 使用颜色混合:加算,减算

来源:未知 责任编辑:责任编辑 发表时间:2014-01-25 11:31 点击:

CCSprite有一个ccBlendFunc类型的blendFunc_结构体成员,可以用来设置描绘时的颜色混合方案。ccBlendFunc包含了一个src和一个dst,分别表示目标和源的运算因子。

如果我们对一个Sprite使用setBlendFunc方法,如:

CCSprite::setBlendFunc(ccBlendFunc blendFunc);

会以这个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会覆盖下面的描绘,但如果有透明的地方,则会显示下面的色值。让我们看一下说使用各个参数的效果:


我们可以在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相关的因子,会根据透明度来计算,比如透明度高的颜色占较大比重等。如默认情况。

附:

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • cocos2d-x学习笔记(19)--label 、label atlas
  • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
  • Cocos2d-x学习(一):HelloWorld
  • cocos2dx在xcode下开发,编译到android上(2)
  • cocos2d 设置屏幕默认方向
  • Cocos2d-x 2.0 之 Actions “三板斧” 之一
  • cocos2d-x学习笔记(22)--地图的使用2(TMX) --Z-Order、AnchorPoi
  • cocos2d-x学习笔记(18)--游戏打包(windows平台)
  • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1