HTML5游戏引擎(十四)-颜色效果——混合模式 & 滤镜 & 颜色矩阵滤镜 & 矩阵数据说明

颜色效果

混合模式

混合模式是指同一个显示容器中的两个显示对象重叠时,重叠区域如何呈现的方式,也就是两个显示对象的重叠区域像素如何混合产生结果像素。

覆盖混合

覆盖混合,表示为”normal”,该显示对象出现在背景前面。显示对象的像素值将覆盖背景的像素值。在显示对象为透明的区域,背景是可见的。

通常不设置混合模式,默认就是覆盖混合。设置图片为覆盖模式的代码:
img.blendMode = egret.BlendMode.NORMAL;

使用覆盖混合的效果

叠加混合

叠加混合,表示为”add” :将显示对象的原色值添加到它的背景颜色中,上限值为 0xFF。此设置通常用于使两个对象间的加亮溶解产生动画效果。

设置图片为覆盖模式的代码:
img.blendMode = egret.BlendMode.ADD;

擦拭混合

擦除混合,表示为”erase” :根据显示对象的 Alpha 值擦除背景。即不透明区域将被完全擦除。

设置图片为覆盖模式的代码:
img.blendMode = egret.BlendMode.ERASE;

滤镜

使用 GlowFilter 类可以对显示对象应用发光效果。发光样式的选项包括内侧发光、外侧发光以及挖空模式。
这里创建一个函数用来对传入的显示对象用给定的参数进行发光滤镜处理。
在接下的示例代码中,要传给滤镜的参数,将首先以局部变量的方式定义,并把每个参数的含义在注释部分进行说明。然后将这些参数填充到滤镜的构造函数相应位置。注意,为了结构清晰便于理解代码,所定义的局部变量与滤镜的构造函数参数将一一对应,并且顺序也是完全一致的。

白鹭小鸟在程序中用一张位图表示:
var img:egret.Bitmap;

创建滤镜:

var color:number = 0x33CCFF;        /// 光晕的颜色,十六进制,不包含透明度
var alpha:number = 0.8;             /// 光晕的颜色透明度,是对 color 参数的透明度设定。有效值为 0.0 到 1.0。例如,0.8 设置透明度值为 80%。
var blurX:number = 35;              /// 水平模糊量。有效值为 0 到 255.0(浮点)
var blurY:number = 35;              /// 垂直模糊量。有效值为 0 到 255.0(浮点)
var strength:number = 2;            /// 压印的强度,值越大,压印的颜色越深,而且发光与背景之间的对比度也越强。有效值为 0 到 255。暂未实现
var quality:number = egret.BitmapFilterQuality.HIGH;        /// 应用滤镜的次数,建议用 BitmapFilterQuality 类的常量来体现
var inner:boolean = false;            /// 指定发光是否为内侧发光,暂未实现
var knockout:boolean = false;            /// 指定对象是否具有挖空效果,暂未实现
var glowFilter:egret.GlowFilter = new egret.GlowFilter( color, alpha, blurX, blurY,strength, quality, inner, knockout );

最后对位图对象应用发光滤镜:

img.filters = [ glowFilter ];

如图是使用滤镜前后的效果对比:

颜色矩阵滤镜

ColorMatrixFilter–颜色矩阵滤镜(egret.ColorMatrixFilter) 在颗粒等级上提供更好的控制显示对象的颜色转换方式。ColorMatrixFilter为 4行5列的多维矩阵(20个元素的数组)。下图为等效的矩阵。

下面是一个图片灰度化的示例。首先准备一张图片:

然后通过下面颜色转换矩阵代码添加一个“灰度化”的效果:

var hero:egret.Bitmap = new egret.Bitmap();
hero.texture = RES.getRes("hero_png");
this.addChild(hero);
//颜色矩阵数组
var colorMatrix = [0.3,0.6,0,0,0,0.3,0.6,0,0,0,0.3,0.6,0,0,0,0,0,0,1,0
];
var colorFlilter = new egret.ColorMatrixFilter(colorMatrix);
hero.filters = [colorFlilter];

在上述示例中,首先新建了一个显示对象,然后新建了一个颜色转换矩阵 ColorMatrixFilter,并通过显示对象的 filters 属性来设置滤镜。显示对象的 filters 属性包含当前与显示对象关联的每个滤镜对象的索引数组。

实现效果的关键是颜色转换矩阵的设置。上面我们将每个颜色通道都乘相同的系数来实现灰度效果。

矩阵数据说明

在上面例子中我们实现了灰度图的效果,下面介绍颜色矩阵的含义:

实际的颜色值由下面的公式决定:

redResult   = (a[0] * srcR)  + (a[1] * srcG)  + (a[2] * srcB)  + (a[3] * srcA)  + a[4];
greenResult = (a[5] * srcR)  + (a[6] * srcG)  + (a[7] * srcB)  + (a[8] * srcA)  + a[9];
blueResult  = (a[10] * srcR) + (a[11] * srcG) + (a[12] * srcB) + (a[13] * srcA) + a[14];
alphaResult = (a[15] * srcR) + (a[16] * srcG) + (a[17] * srcB) + (a[18] * srcA) + a[19];

公式中 srcR、srcG、srcB、srcA 表示原始显示对象的像素值, a 是颜色矩阵。新的红绿蓝和alpha通道实际由颜色矩阵和原始图片的像素值同时决定。颜色矩阵中的 Off 可以直接设置偏移量加上相应的 R G B A 的值的乘积即为最终的颜色值。所以与原来完全相同的矩阵转换应该是下面这样的:

var colorMatrix = [1,0,0,0,100,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0
];

修改代码中的颜色矩阵数组,编译运行得到如下效果图:

需要注意的 R G B 通道对应的偏移量的值应该为 -255 ~ 255,Alpha 通道对应的偏移量取值范围为 -255 ~ 255.应避免传入除数字外其他类型的值,比如字符串等。

绿色加倍

如果想使绿色通道加倍,colorMatrix[6] 加倍即可:

var colorMatrix = [1,0,0,0,0,0,2,0,0,0,0,0,1,0,0,0,0,0,1,0
];

增加亮度

增加亮度的最简单途径是给每个颜色值添加相同的偏移量。

var colorMatrix = [1,0,0,0,100,0,1,0,0,100,0,0,1,0,100,0,0,0,1,0
];

HTML5游戏引擎(十四)-颜色效果——混合模式 滤镜 颜色矩阵滤镜 矩阵数据说明相关推荐

  1. HTML5游戏引擎(十五)-时间控制——Timer计时器 Ticker心跳-startTick-stopTick 帧事件-ENTER_FRAME

    HTML5游戏引擎(十五)-时间控制--Timer计时器 & Ticker心跳-startTick-stopTick & 帧事件-ENTER_FRAME 时间控制 Timer计时器 假 ...

  2. HTML5游戏引擎(十六)-屏幕适配——showAll模式 noScale模式 noBorder模式 exactFit模式 fixedWidth模式 fixedHeight模式

    HTML5游戏引擎(十六)-屏幕适配--showAll模式 & noScale模式 & noBorder模式 & exactFit模式 & fixedWidth模式 & ...

  3. HTML5游戏引擎(二)02-egret引擎之hello world——快速上手-清理项目 程序入口 绘制单色背景 调整屏幕的适配模式 添加文字 响应用户操作-让文字变色

    HTML5游戏引擎(二)02-egret引擎之hello world--快速上手-清理项目 & 程序入口 & 绘制单色背景 & 调整屏幕的适配模式 & 添加文字 &am ...

  4. HTML5游戏引擎lufylegend深入浅出 - 引擎介绍原理

    又很久没有更新博客了,在这段时间里发生的事还蛮多的,回想起来才发现时间过得好快啊.至于博客嘛,天天都会关注,一来想看看大家是否写了一些评论,二来想看看大神们(如lufy,浅墨,雾央,Himi等)有没有 ...

  5. 我的二次创业——Egret Html5游戏引擎

     原文地址:我的二次创业--Egret Html5游戏引擎作者:陈书艺 今年春天因为种种原因,我下决心开始自己人生中的第二次创业.很多关心我的朋友来跟我聊,绝大多数都在给我泼冷水,因为他们很不理解 ...

  6. HTML5游戏引擎Egret发布2.0版 开发工具亦获更新

    5月22日在北京国际会议中心举办的HTML5游戏生态大会上,白鹭时代旗下游戏引擎Egret Engine发布2.0版,同时还发布了Flash转换HTML5工具Egret Conversion.HTML ...

  7. QQ空间玩吧HTML5游戏引擎使用比例分析

    GameLook报道/"Cocos 2015开发者大会(春季)"于4月2日在国家会议中心圆满落下帷幕.在会上全新的3D编辑器,Cocos Runtime等产品重磅公布,给业界带来了 ...

  8. 5款常用的html5游戏引擎以及优缺点分析

    如果您是游戏开发人员,并且正在寻找JavaScript和html5无缝协作的游戏引擎. 虽然市场上有很多免费和付费的游戏引擎,但一款让专业游戏开发者满意的游戏引擎,必须包含独特的东西,所以游戏开发者对 ...

  9. HTML5游戏开发(十)

    HTML5游戏开发(十) 一.动画 1.动画循环   在Canvas中这病动画效果很简单:只需要在播放动画时持续更新并绘制就行了.这种持续更新与重绘叫就动画循环. (1)通过requestAnimat ...

  10. HTML5游戏引擎深度测评

    https://zhuanlan.zhihu.com/p/20768495 最近看到网上一篇文章,标题叫做<2016年 最火的 15 款 HTML5 游戏引擎>.目前针对HTML5游戏的解 ...

最新文章

  1. Science:充满铵盐的环境依然发生固氮
  2. iOS10 UI教程基改变视图的外观与视图的可见性
  3. android之下载416错误
  4. python gui编程 从入门到项目实战_python GUI编程 QT5开发项目实战
  5. Linux创建守护进程
  6. 【算法分析与设计】图的着色问题
  7. 8中间件,csrf跨站请求伪造,auth模块
  8. mysql查询数据上一条_MySQL查询当前数据上一条和下一条的记录
  9. python伪装浏览器https_Python3 伪装浏览器的方法示例
  10. 前端ajax token,jQury Ajax使用Token验证身份实例代码_白江_前端开发者
  11. mysql中timestamp字段
  12. Python中requests上传大文件
  13. Wireshark数据抓包分析之FTP协议
  14. Android NDK开发,使用ndk-build编译,写的太详细了
  15. Python语言程序设计基础_期末作品设计——收银软件(2020-2 B)_答案_通识教育必修课程_上海师范大学
  16. 杨辉三角形【找规律】
  17. 凸函数的梯度的单调性 (Monotonicity of gradient)
  18. 服务器显示url过长,post跳转页面避免414提示url过长
  19. 计算机科技英语文章及翻译,计算机专业英语短文翻译.doc
  20. MATLAB 深度学习部署到树莓派问题解决方法

热门文章

  1. 【人脸关键点】——PFLD人脸关键点检测解读
  2. 惠普打印机USB安装成功,但断开USB重新连接时显示脱机无法打印问题(上一版本的驱动程序还在内存中,因此无法加载驱动程序)
  3. 微服务架构下的统一身份认证和授权
  4. 论文阅读:A machine learning approach to medical image classification:Detecting age-related macular dege
  5. 什么是运维?运维主要做哪些工作?
  6. OpenShift——openshift 3.11 集群安装(亲测版,你懂的)
  7. leaflet沿线标注_Leaflet for R包(三) 符号标记
  8. linux WPA_supplicant
  9. html 中添加提示,如何interpretHTML UIB-提示
  10. java代码区出现红色,绿色怎么办