热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ActionScript3游戏中的图像编程(连载九十三,第4章完)

总目录:http:blog.csdn.netiloveas2014articledetails383044774.5.7 卷积矩阵的高级技巧及其原理     很多图形学教程

总目录:http://blog.csdn.net/iloveas2014/article/details/38304477

4.5.7 卷积矩阵的高级技巧及其原理

      很多图形学教程或者书籍都习惯于在给出矩阵公式以后就直接列出几个常用的,并且看起来比较有趣的滤镜效果,这是“授之以鱼”的做法,而笔者更倾向于“授之以渔”,所以,我不打算沿用他们的套路,而是打算通过介绍算法技巧使笔者在阅读完本节之后可以学以致用,举一反三。

      网上那些老掉牙的例子都比较倾向于用方阵,所以此处笔者打算先制作一个行数和列数不等的阵来制作效果,比如下面的代码就创建了一个15*1的模糊矩阵:

var con:COnvolutionFilter= new ConvolutionFilter(15, 1, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 15, 0, false);


 

      这个卷积滤镜的运行结果如图 4.73所示,它只在x方向上模糊。可以看到比较明显的振铃现象。

,

图 4.73 15*1的矩阵

      虽然它对于模糊来说并不友好,但这并不代表它一无是处,而且有时我们还更加希望振铃的感觉更加明显。

      我们已经知道,振铃是模糊区域过大,轮廓出现交叉所致,那么,我们可以利用这一点加强这种振荡的效果:

var con:COnvolutionFilter= new ConvolutionFilter(15, 1, [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1], 8, 0, false);

      交叉读取周边像素,会使像素的交互产生跳跃式的融合,振铃现象得到进一步的增强,就像弹簧片或者橡皮条在振动一样(图 4.74)。

 ,

图 4.74 交叉融合的矩阵


      这样的图虽然没啥美观度可言,但您可以把它放到一些趣味百科的专题网站,论坛或者微薄上给网民们普及振铃方面的知识,因为这张静态图可以使肉眼产生振动的错觉,有一定的奇妙之处。

      言归正传,振动只引起x方向的模糊显得有点不自然,我们希望y方向也有一定程度的模糊,比如上下1像素,这时候我们就可以在现有基础上将其扩展为15*3的矩阵:

var con:COnvolutionFilter= new ConvolutionFilter(45, 1, 
[1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1], 
24, 0, false);


 

      但可惜我们并没有如愿实现y方向模糊的效果,取而代之的是色彩的变淡(图 4.75)。

 ,

图 4.75 y方向扩展到3

      原因很好找,就是因为中间像素点与左上方,右下方等位置的像素也进行了融合,所以结果显示出来会比原来模糊,但不设置上下方的像素,又无法在y方向上进行模糊,怎么办?

      遇到这种两者相互冲突的情况,笔者最喜欢做的事情就是尽可能地把两个行为进行分离,避免让它们之间直接接触,此处我继续沿用此法,具体的实现自然就是多定义一个纵向的卷积滤镜了。

var con:COnvolutionFilter= new ConvolutionFilter(15, 1, [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1], 9, 0, false); 
var con2:COnvolutionFilter= new ConvolutionFilter(1, 3, [1, 1, 1], 3, 0, false);
main_txt.filters = [bev, con, con2];


 

      得到的结果非常干净,如图 4.76所示。

,

图 4.76 将纵横两方向分离

      如果觉得纵向模糊幅度太小,就可以将第二个卷积滤镜的高度调大一些,比如9:

var con2:COnvolutionFilter= new ConvolutionFilter(1, 5, [1, 1, 1, 1, 1], 5, 0, false);

      得到的效果如图 4.77所示。

,

图 4.77 y方向继续拉长

      矩阵的乘法将单像素通道间的数据有机结合在一起,而卷积更是充分调度了像素间的数据交互,增强了程序对色彩的可控性,给设计者提供了更广阔的发展空间,矩阵数学的艺术性再次得到了充分的体现。

ActionScript3游戏中的图像编程(连载九十三,第4章完)


推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • andr ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 如何在WPS Office for Mac中调整Word文档的文字排列方向
    本文将详细介绍如何使用最新版WPS Office for Mac调整Word文档中的文字排列方向。通过这些步骤,用户可以轻松更改文本的水平或垂直排列方式,以满足不同的排版需求。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • MATLAB实现n条线段交点计算
    本文介绍了一种通过逐对比较线段来求解交点的简单算法。此外,还提到了一种基于排序的方法,但该方法较为复杂,尚未完全理解。文中详细描述了如何根据线段端点求交点,并判断交点是否在线段上。 ... [详细]
  • 高效解决应用崩溃问题!友盟新版错误分析工具全面升级
    友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ... [详细]
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
  • 本文介绍如何在Linux服务器之间使用SCP命令进行文件传输。SCP(Secure Copy Protocol)是一种基于SSH的安全文件传输协议,支持从远程机器复制文件到本地服务器或反之。示例包括从192.168.45.147复制tomcat目录到本地/home路径。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 本文介绍如何解决在 IIS 环境下 PHP 页面无法找到的问题。主要步骤包括配置 Internet 信息服务管理器中的 ISAPI 扩展和 Active Server Pages 设置,确保 PHP 脚本能够正常运行。 ... [详细]
  • 国内BI工具迎战国际巨头Tableau,稳步崛起
    尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ... [详细]
author-avatar
syingjin
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有