`

Cocos2d中使用颜色混合:加算,减算

 
阅读更多

转自:http://blog.sina.com.cn/s/blog_7a2ffd5c0100xtid.html

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

 附:

常数 相关因子 融合因子结果
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)
  • 大小: 8.4 KB
  • 大小: 9.1 KB
  • 大小: 5.5 KB
分享到:
评论

相关推荐

    Cocos2D-X开发学习笔记-渲染框架之布景层类的使用示例

    在Cocos2D-X中,你可以控制各个图层或精灵之间的颜色混合方式,通过设置混合函数(blend function)来实现。这可以用来创建许多视觉特效,比如发光、阴影、色彩叠加等。在实际游戏开发中,混合模式常用于粒子系统、...

    cocos2d-x任意多边形渲染

    在Cocos2d-x中,我们通常使用`cc.DrawNode`类来绘制多边形。这个类提供了一系列的绘图方法,如`drawPolygon`,可以用来绘制任意形状的多边形。 1. **绘制多边形**:`drawPolygon`方法接受一个顶点数组和颜色作为...

    我所理解的Cocos2d-x P438.pdf

    11. **图层混合模式**:Cocos2d-x允许开发者设置不同的混合模式,实现丰富的视觉效果,如颜色叠加、透明度调整等。 12. **性能优化**:Cocos2d-x提供了多线程支持、批处理渲染、纹理 atlasing等技术,帮助开发者...

    cocos2d-x 2.x 图层特效Effect

    在cocos2d-x 2.x版本中,图层特效(Effect)是为游戏场景增添视觉魅力的关键元素。本文将深入探讨如何利用cocos2d-x的特效功能,为你的2D游戏创建出引人入胜的动画效果。 首先,我们要理解在cocos2d-x中的"图层"...

    OPENGL ES以及COCOS 2D教程

    OpenGL ES和Cocos2D是两个在移动设备上广泛用于2D和3D图形渲染的框架,它们在游戏开发和视觉应用中占据了重要的地位。本文将深入探讨这两个技术的基础概念、核心特性以及如何结合使用。 **OpenGL ES简介** OpenGL ...

    Cocos2D-X开发学习笔记-渲染框架之图形的绘制

    - 在Cocos2D-X中,你可以设置颜色(Color4F)来改变Node的颜色表现,也可以调整混合模式(BlendFunc)来控制不同图层之间的颜色混合效果。 3. **纹理和精灵表**: - **Texture2D**:管理图像资源,可以加载PNG、...

    Cocos2d-x初入学堂-->CCSprite基本处理(2)工程

    至于颜色混合,Cocos2d-x提供了` blendFunc `属性来控制精灵的混合模式。默认情况下,它会使用预乘Alpha,但你可以根据需要设置不同的混合函数,如` gl_SRC_ALPHA, gl_ONE_MINUS_SRC_ALPHA `,这将改变精灵颜色与...

    cocos2d-x-filters:cocos2d-x 的过滤器工具

    【cocos2d-x-filters】是一个专门为cocos2d-x游戏引擎开发的过滤器工具,它支持2.x和3.x版本以及quick-cocos2d-x 2.x版本。cocos2d-x是一款广泛使用的开源游戏开发框架,采用C++语言编写,允许开发者创建跨平台的2D...

    cocos2dx替换颜色shader(把紫色替换成灰色)

    为了在Cocos2d-x中使用这个Shader,你需要创建一个`GLProgram`对象,加载并链接这两个Shader文件,然后将其应用于`Sprite`或其他渲染节点。下面是一个简单的示例: ```cpp auto glProgram = GLProgram::...

    cocos2d-0.6.9-py3-none-any.rar

    标题中的“cocos2d-0.6.9-py3-none-any”揭示了这是cocos2d的一个特定版本——0.6.9,它针对Python 3进行了优化,并且是跨平台的("none-any"表示可以在任何平台上运行)。这个压缩包文件的扩展名".rar"表明它是RAR...

    cocos2d-x学习笔记(9)--effect(特效).rar

    4.2 光照效果:虽然Cocos2d-x自身不直接支持光照效果,但开发者可以利用颜色混合、透明度和自定义Shader来模拟光照效果。 五、实例分析:effectTest 5.1 "effectTest"可能是一个示例项目,用于演示如何在Cocos2d-x...

    Cocos2d-X 2.2.1 API 文档

    2. **渲染系统**:Cocos2d-X使用基于OpenGL ES的渲染引擎,提供了丰富的图形绘制功能,包括纹理、颜色、混合模式、滤镜等。通过了解这些,开发者可以创建出丰富的视觉效果。 3. **动作与动画**:Cocos2d-X提供了...

    cocos3.6中文帮助文档

    JavaScript版本的Cocos3.6文档将详细解释如何在JavaScript环境中使用Cocos引擎。 三、核心组件 1. Scene Graph(场景图):Cocos3.6使用场景图来组织游戏对象,允许开发者轻松管理游戏的各个阶段。 2. Node(节点)...

    CocosCreator v2.1.2 Shader使用demo

    在游戏开发领域,CocosCreator是一个非常流行的2D和3D游戏引擎,它提供了一整套工具和技术,帮助开发者创建高质量的游戏。在这个"CocosCreator v2.1.2 Shader使用demo"中,我们主要探讨的是如何利用CocosCreator的...

    Cocos2dx lua版的富文本框

    6. **API接口**:在Cocos2d-x Lua中,你可以使用如`createWithTTF()`、`setString()`、`setAlignment()`等API接口来创建、设置和调整富文本框的属性。例如,`setString()`用于设置显示的文本,`setAlignment()`用于...

    Cocos2D-X2.2.3学习笔记10(几何图形)

    在Cocos2D-X2.2.3版本中,开发者可以利用其丰富的图形库来创建各种复杂的几何图形,从而实现丰富的视觉效果。本篇学习笔记将深入探讨Cocos2D-X中的几何图形相关知识。 首先,Cocos2D-X提供了多种基本几何图形类,如...

    OpenGL ES教程以及COCOS 2D教程大全(文档)

    OpenGL ES和Cocos2D是移动平台上开发2D和3D图形应用的两个核心工具,尤其在iOS设备上,它们是构建游戏和其他视觉效果的重要技术。这篇教程集合旨在为开发者提供一个全面的学习资源,帮助他们掌握这两项技术。 ...

    Cocos2d-x 3.x游戏开发实战 代码

    2. **渲染系统**:Cocos2d-x 3.x的渲染系统支持OpenGL ES 2.0,提供了一系列图形绘制功能,如纹理、颜色、混合模式等。开发者可以通过Shader系统实现自定义的图形效果,以增强游戏视觉体验。 3. **动画与物理引擎**...

    Cocos2dx特效 水纹特效1

    在Cocos2d-x中,特效是提升游戏视觉体验的关键元素之一,水纹特效就是其中一种常见的动态效果,它能为游戏场景增添生动的水面波动感。本文将深入探讨Cocos2dx中的水纹特效及其实现方法。 首先,我们要理解水纹特效...

    cocos中自带shader的例子

    6. **Cocos2D-x或Cocos Creator接口**:掌握在Cocos引擎中创建和管理Shader的相关API,如`cc.Shader`类的用法。 7. **调试技巧**:当Shader出现问题时,学会使用Cocos的调试工具和GLSL的`glGetError`等函数来定位和...

Global site tag (gtag.js) - Google Analytics