`
我家树苗三岁半
  • 浏览: 4577 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

andengine中glBlendFunc()

阅读更多
转自:http://www.cnblogs.com/yujunyong/archive/2011/04/13/2015467.html
glBlendFunc();--混合

OpenGL 会把源颜色和目标颜色各自取出,并乘以一个系数(源颜色乘以的系数称为“源因子”,目标颜色乘以的系数称为“目标因子”),然后相加,这样就得到了新的颜 色。(也可以不是相加,新版本的OpenGL可以设置运算方式,包括加、减、取两者中较大的、取两者中较小的、逻辑运算等,但我们这里为了简单起见,不讨 论这个了) 下面用数学公式来表达一下这个运算方式。假设源颜色的四个分量(指红色,绿色,蓝色,alpha值)是(Rs, Gs, Bs, As),目标颜色的四个分量是(Rd, Gd, Bd, Ad),又设源因子为(Sr, Sg, Sb, Sa),目标因子为(Dr, Dg, Db, Da)。则混合产生的新颜色可以表示为: (Rs*Sr+Rd*Dr, Gs*Sg+Gd*Dg, Bs*Sb+Bd*Db, As*Sa+Ad*Da) 当然了,如果颜色的某一分量超过了1.0,则它会被自动截取为1.0,不需要考虑越界的问题。

源因子和目标因子是可以通过glBlendFunc函数来进行设置的。glBlendFunc有两个参数,前者表示源因子,后者表示目标因子。这两个参数可以是多种值,下面介绍比较常用的几种。

GL_ZERO: 表示使用0.0作为因子,实际上相当于不使用这种颜色参与混合运算。

GL_ONE: 表示使用1.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值来作为因子。 除此以外,还有GL_SRC_COLOR(把源颜色的四个分量分别作为因子的四个分量)、GL_ONE_MINUS_SRC_COLOR、 GL_DST_COLOR、GL_ONE_MINUS_DST_COLOR等,前两个在OpenGL旧版本中只能用于设置目标因子,后两个在OpenGL 旧版本中只能用于设置源因子。新版本的OpenGL则没有这个限制,并且支持新的GL_CONST_COLOR(设定一种常数颜色,将其四个分量分别作为 因子的四个分量)、GL_ONE_MINUS_CONST_COLOR、GL_CONST_ALPHA、 GL_ONE_MINUS_CONST_ALPHA。另外还有GL_SRC_ALPHA_SATURATE。新版本的OpenGL还允许颜色的alpha 值和RGB值采用不同的混合因子。



举例来说: 如果设置了glBlendFunc(GL_ONE, GL_ZERO);,则表示完全使用源颜色,完全不使用目标颜色,因此画面效果和不使用混合的时候一致(当然效率可能会低一点点)。如果没有设置源因子和目标因子,则默认情况就是这样的设置。 如果设置了glBlendFunc(GL_ZERO, GL_ONE);,则表示完全不使用源颜色,因此无论你想画什么,最后都不会被画上去了。(但这并不是说这样设置就没有用,有些时候可能有特殊用途) 如 果设置了glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);,则表示源颜色乘以自身的alpha 值,目标颜色乘以1.0减去源颜色的alpha值,这样一来,源颜色的alpha值越大,则产生的新颜色中源颜色所占比例就越大,而目标颜色所占比例则减 小。这种情况下,我们可以简单的将源颜色的alpha值理解为“不透明度”。这也是混合时最常用的方式。 如果设置了glBlendFunc(GL_ONE, GL_ONE);,则表示完全使用源颜色和目标颜色,最终的颜色实际上就是两种颜色的简单相加。例如红色(1, 0, 0)和绿色(0, 1, 0)相加得到(1, 1, 0),结果为黄色。



注意: 所 谓源颜色和目标颜色,是跟绘制的顺序有关的。假如先绘制了一个红色的物体,再在其上绘制绿色的物体。则绿色是源颜色,红色是目标颜色。如果顺序反过来,则 红色就是源颜色,绿色才是目标颜色。在绘制时,应该注意顺序,使得绘制的源颜色与设置的源因子对应,目标颜色与设置的目标因子对应。不要被混乱的顺序搞晕 。
分享到:
评论

相关推荐

    andengine 中文

    AndEngine提供了基本的碰撞检测API,可以帮助开发者检测游戏中的实体是否发生碰撞。同时,它还支持Box2D物理引擎的集成,可以实现复杂的物理模拟,如重力、弹性碰撞等。 七、用户输入处理 AndEngine能有效处理触屏...

    AndEngine 中文文档。

    在AndEngine中,引擎将游戏分割为不同的时间片段,对游戏场景中的所有活动对象进行同步绘制和更新。 5. Camera:AndEngine中的Camera用于从整个游戏场景中截取一个矩形区域显示到屏幕上。一个场景通常对应一个...

    一个关于andengine中精灵 动作的简单例子

    在Android游戏开发中,AndEngine是一个非常受欢迎的2D游戏引擎,它允许开发者轻松地创建出高质量的2D游戏。本篇文章将详细讲解AndEngine中精灵(Sprite)及其动作(Animations)的应用,以一个简单的例子为基础,...

    AndEngine 中文文档

    1. **安装与设置**:首先,你需要了解如何将AndEngine库导入到你的Android Studio项目中,以及如何配置项目设置以确保引擎正常工作。这通常涉及到Gradle依赖的添加和AndroidManifest.xml的调整。 2. **基本概念**:...

    AndEngine游戏开发示例

    场景(Scene)是AndEngine中组织游戏元素的基本单位,你可以将多个场景切换来实现游戏的不同阶段。Scene由一组称为Entity的对象组成,如精灵(Sprite)、文本(Text)或自定义形状。精灵是最常见的Entity,通常用于...

    andengine 中文api及文档

    为了开始使用AndEngine,开发者首先需要下载并包含相关的库文件到自己的项目中,然后创建继承自BaseGameActivity的自定义Activity类,并重载必要的回调方法。这些方法中,开发者需要实现自己游戏的初始化逻辑,包括...

    Android应用源码之andengine中直接加载多张小图片合成一张大图片生成动画精灵.zip

    在Android应用开发中,AndEngine是一款非常流行的2D游戏开发框架,它基于OpenGL ES,提供了丰富的图形绘制和动画处理功能。本示例源码着重展示了如何利用AndEngine将多张小图片合并成一张大图,进而创建动画精灵,...

    AndEngine中文文档资料混总

    一些我搜集的AndEngine游戏引擎的资料混总,都是些中文的,对入门学习有帮助

    Android应用源码之andengine中直接加载多张小图片合成大图片动画

    在Android应用开发中,AndEngine是一款非常流行的2D游戏开发引擎,它提供了强大的图形渲染和动画处理能力。本文将深入探讨如何在AndEngine中通过直接加载多张小图片来合成一张大图片,进而创建出动态的动画精灵。 ...

    andengine2.0开发的小游戏

    在这个"andengine2.0开发的小游戏"中,我们可以看到作者利用AndEngine 2.0版本创建了一款名为"Jumper Game Tutorial"的游戏。 Jumper Game Tutorial很可能是一个跳跃类的游戏,教导用户如何使用AndEngine来开发类似...

    AndEngine游戏引擎JAR文件

    例如,精灵是AndEngine中的基本元素,用于表示2D游戏中的静态或动态对象,如角色、道具等。而纹理atlases则是优化资源加载和内存使用的一种方法,将多个小图像合并成一个大纹理,减少了在游戏运行时加载和切换图片的...

    AndEngine中文文档

    - 在AndEngine中,`BaseGameActivity`是最基本的Activity类,所有AndEngine的应用程序都应该继承自这个类。为了使AndEngine能够正常工作,开发者需要重写以下四个方法: - `onLoadEngine()`:初始化游戏引擎,返回...

    安卓Android源码——andengine中直接加载多张小图片合成一张大图片生成动画精灵.zip

    在Android开发中,AndEngine是一个流行的2D游戏开发框架,它提供了一系列的工具和功能,使得开发者能够轻松创建丰富的游戏和交互式应用。AndEngine以其高效、轻量级和易于学习的特点,深受开发者喜爱。本篇文章将...

    AndEngine最新Jar包

    关于描述中提到的`attachChild()`方法,它是AndEngine中用于在场景中添加游戏对象的关键函数。在AndEngine中,游戏场景是由多个实体(或称为节点)组成的,`attachChild()`就是将一个节点(如精灵、纹理、形状等)...

    andengine源码及demo

    AndEngine是一款专为Android平台设计的2D游戏开发框架,它提供了一套高效、易用的API,使得开发者能够快速构建各种2D游戏。AndEngine源码的分析和理解对于想要深入学习Android游戏开发的人来说至关重要。 1. **...

    AndEngine游戏引擎中文文档

    1. Activity:在AndEngine中,Activity是游戏启动时必不可少的启动类。AndEngine提供了一个BaseGameActivity类,开发者可以通过继承这个类来创建自己的游戏Activity。BaseGameActivity已经对Activity中必要的生命...

    Android andengine中直接加载多张小图片合成一张大图片生成动画精灵源码.zip

    在Android游戏开发中,AndEngine是一个非常流行的2D游戏引擎,它提供了丰富的功能,使得开发者可以轻松地创建高质量的游戏。本资源"Android andengine中直接加载多张小图片合成一张大图片生成动画精灵源码.zip"是...

    Andengine的jar包

    在描述中提到的“andengine.jar”是Andengine的主要组件,它包含了游戏引擎的核心功能。这个jar文件让开发者可以直接在Android项目中导入,无需关心底层图形和渲染的复杂细节。同时,Andengine还提供了一系列的扩展...

    Android高级应用源码-andengine中直接加载多张小图片合成一张大图片生成动画精灵.zip

    在Android开发中,AndEngine是一款流行的2D游戏引擎,它为开发者提供了丰富的功能来构建精美的游戏和图形应用。这个压缩包"Android高级应用源码-andengine中直接加载多张小图片合成一张大图片生成动画精灵.zip"显然...

    AndEngine自定义Button

    在Android游戏开发中,AndEngine是一个非常受欢迎的2D游戏引擎,它提供了丰富的功能和简单易用的API,使得开发者可以快速构建出高质量的游戏。在AndEngine中,UI元素的创建是游戏界面交互的重要组成部分,而Button...

Global site tag (gtag.js) - Google Analytics