混合BlendFunc的使用

1、什么是混合模式

“混合”是指两种颜色的叠加方式。在新图片将要渲染画到屏幕上的时候,将用在新图片中的红、绿、蓝和透明度信息,与屏幕上已经存在的图片颜色信息相融合。

说的具体一点,就是把某一像素位置上原来的颜色和将要画上去的颜色,通过某种方式混在一起,从而实现特殊的效果。

新图片颜色被称作“源颜色”,而屏幕上已存在的图片颜色则被称作“目标颜色”。

OpenGL会把源颜色和目标颜色各自取出,并乘以一个系数(源颜色乘以的系数称为“源因子”,目标颜色乘以的系数称为“目标因子”),然后相加,这样就得到了新的颜色。

2、如何混合的

颜色信息的四个分量(红,绿,蓝,透明度)

(1)“源颜色”  :(Rs, Gs, Bs, As)

(2)“目标颜色”:(Rd, Gd, Bd, Ad)

(3)“源因子”  :(Sr, Sg, Sb, Sa)

(4)“目标因子”:(Dr, Dg, Db, Da)

那么混合产生的新颜色可以表示为:(Rs*Sr + Rd*Dr , Gs*Sg + Gd*Dg , Bs*Sb + Bd*Db , As*Sa + Ad*Da)

如果颜色的某一分量超过了1.0,则它会被自动截取为1.0,不需要考虑越界的问题。

3、部分混合因子

4、使用方法

Sprite精灵类中有一个设置混合方式的函数setBlendFunc(BlendFunc),另外混合方式的属性值是以BlendFunc结构体作为数据的,定义方式为:{ ‘源因子‘ , ‘目标因子‘ }。

混合方式可用于精灵纹理图片颜色信息的混合与叠加。

前面文章中写到过创建教学遮罩层,就使用了混合模式 :用CCRenderTexture与BlendFunc制作游戏教学时使用的黑色覆盖层

时间: 2024-10-17 02:40:22

混合BlendFunc的使用的相关文章

openGL中的混合

    之前在项目中就使用过混合,但是研究的不深入,近期美术的一个需求让我下决心重新深入的研究了一下混合以及它在cocos2d-x中的使用,在这里分享给大家. 混合(blend,有些翻译书上把它称作混融,以下简称混合),在openGL中,当一个输入的片元通过了所有相关的片元测试,就可以在与颜色缓存中当前的内容通过某种方式进行合并了.最简单的,也是默认的方式,就是直接覆盖已有的值,实际上不能称作是合并.除此之外,我们也可以将帧缓存中已有的颜色与输入的片元颜色进行混合.这是在openGL流程上的定义

关于cocos2d-js中使用 ClippingNode 以及 BlendFunc 来实现遮罩

关于ClippingNode 以及 BlendFunc 来实现遮罩 1. ClippingNode实现遮罩 首先要准备 一张png有透明度的图片 一张想要被遮住的图片 cliper : function(frameName){ //创建一个遮罩的模板 var sten = new cc.Sprite(frameName); //创建一个ClippingNode 并设置一些基础属性 容器宽高与模板有关 var clipnode = new cc.ClippingNode(); clipnode.a

【opencv入门之二】感兴趣区域ROI,线性混合addWeighted

参考网站: http://blog.csdn.net/poem_qianmo/article/details/20911629 1.感兴趣区域ROI //[2]定义一个Mat类型并给其设定ROI区域 Mat imageROI = srcImage1( Rect(200, 250, logoImage.cols, logoImage.rows )); //[3]加载掩摸(必须是灰度图) Mat mask = imread( "dota_logo.jpg", 0 ); //[4]将掩摸拷贝

C++与Java混合编程

http://www.cnblogs.com/lxshanye/p/3209542.html 现在的程序员,不再像以前一样,掌握一种编程语言就可以混得有模有样了,现实的情况是,真实的项目中,通常是涉及多种编程语言,举几个简单的例子,一个软件为了快速开发,可能是使用Delphi或VB作为界面开发首选语言,底层的指令或核心算法,会使用C/C++处理,涉及数据处理的时候,为了安全和快速开发,会使用Javascript或Python等脚本语言实现数据分析处理.因此,开发者应该学习或掌握语言混合编程. C

Less学习笔记 -- Mixins(混合)一

混合: 混合可以将一个定义好的classA轻松的引入到另一个classB中,从而简单实现classB继承classA中的所有属性.任何CSS中的class或者id都可以引入 Less: .aWidth{width:400px;} #aHeight{height:600px;} p{   .aWidth;   #aHeight; } CSS: .aWidth {   width: 400px; } #aHeight {   height: 600px; } p {   width: 400px;

原生,html5,混合Hybird

app开发的三种模式:原生,html5,混合Hybird Native APP:就是所说的原生开发,Native Code编程,代码编译之后以2进制或者字节码的形式运行在OS上,直接调用OS的Device API: Web APP,以HTML+JS+CSS等WEB技术编程,代码运行在浏览器中,通过浏览器来调用Device API(取决于HTML5未来的支持能力): Hybrid APP,就是混合开发.部分代码以WEB技术编程,部分代码由某些Native Container承担(例如PhonGAP

谈谈混合 App Web 资源的打包与增量更新

综述 移动 App 的运行环境具有带宽不稳定,流量收费,启动速度比较重要等特点,所以混合 App 如何加载 Web 资源并不是一个新问题.本文目的是总结出一种资源打包下载的思路和方案,并且提供一种打包工具.本文提到的思路只是一家之言,基本没有参考现有方案,各位方家有不同意见欢迎留言.另外本文没有涉及到 App 内部如何加载资源的问题,这部分我会专门撰写一篇文章讨论. 需求梳理 一般来说,Hybrid-app 对于 Web 资源下载有如下需求: 页面开启速度要快,所以资源的下载和使用不是在同一时间

用c/c++混合编程方式为ios/android实现一个自绘日期选择控件(一)

本文为原创,如有转载,请注明出处:http://www.cnblogs.com/jackybu 前言 章节: 1.需求描述以及c/c++实现日期和月历的基本操作 2.ios实现自绘日期选择控件 3.android实现自绘日期选择控件 目的: 通过一个相对复杂的自定义自绘控件来分享: 1.ios以及android自定义自绘控件的开发流程 2.objc与c/c++混合编程 3.android ndk的环境配置,android studio ndk的编译模式,swig在android ndk开发中的作

混合调用时接口类型中的陷阱

[delphi] view plain copy function abc(A: Integer): IUnknown; 这是一个Delphi的函数声明,看上去很简单,只有一个参数而已,但是真实情况呢?在编译成二进制代码后,实际上函数的参数已经有2个了! 为了更详细的说明问题,先用Delphi写一个DLL,导出一个接口,接口有一个Show方法. [delphi] view plain copy library Project1; uses Windows; {$R *.res} type ITe