(转) [Flash/Flex] 用柏林噪音和滤镜制作翻腾的火焰效果----Flash AS3效应

下图展示的是通过柏林噪声和一些滤镜制作的火焰效果。这个效果是从舞台底部燃起的熊熊烈火。这个效果使用了BitmapData里的perlinNoise方法,以及ColorMatrixFilter和DisplacementMapFilter两个滤镜,点击截图下面的链接,可以在新窗口中查看运行的效果。

 

http://www.flashandmath.com/flashcs5/fire/fire.html

 

https://files.cnblogs.com/wonderKK/fire.zip

点击上面的链接下载完整的源文件,源码中已做好注释,也可以在源码的基础上轻松的自定义效果。

 

效果是如何实现的

 

效果实现的基本思路是通过柏林噪声实现扭曲而不是柏林噪声显示。柏林噪声扭曲效果随着时间平滑的移动。在AS3Flash: Low CPU Clouds Animation - Perfect for Mobile effect这个效果中,我们同样使用了这个思想。在ScrollingPerlinNoise类中,我们创建了一个准确的柏林噪声扭曲效果,然后利用bitmap复制方法随着时间平滑的移动这个扭曲效果,这一点跟clouds效果里一样。

 

下面一步步介绍了火焰的制作过程,不过你也可以打开源文件,体验一下效果,这样目的会更加明确。在main.fla中的onEnter方法中,可以看到绘制和滤镜的每个步骤,这些也已做好注释。

 

下面是火焰效果创建的详细步骤:

 

 

· ScrollingPerlinNoise类的两个实例(我们叫做“clouds”)用来创建火焰。它们是随时间移动的灰度的柏林噪声。这两朵clouds会以不同的方向进行移动,来产生分散的移动的效果。实际上一朵clouds也是可以的,但是用两朵clouds实现的火焰效果会更好。

 

· 在火焰中绘制一个用渐变填充的半椭圆形,让它的顶部更加圆润,而且平滑的淡出。

 

· 现在给灰度的图片加上火的颜色。这一点我们通过BitmapData的palleteMap方法来实现,这和我们在中AS3WoodTexture Class - Apply Wood Texture to Any Display Object example实现木质纹理的方法是一样的。但是在这个效果中我用了一个比较聪明的方法,用ColorMatrixFilter滤镜将颜色转换成红黄白。ColorMatrixFilter在颜色通道值基础上,与它的multipliers和offsets属性进行计算得到最终的颜色值。深灰色转换成红色;灰色转换成黄色,因为红色和绿的混合;浅灰色转换成白色,因为颜色通道里的值都已经被加到最大值255了。

 

· 给clouds填充完颜色红,我为它添加了模糊效果,特别是在y方法模糊值更大,整页可以将颜色延伸到整个图片。

 

· 然后使用DisplacementMapFilter扭曲火焰,让效果更加逼真。DisplacementMapFilter应用于另外一个ScrollingPerlinNoise实例中。因为clouds的不断移动,扭曲效果会随时间不断变化。

 

· 最后,再加另外一个小小的模糊给火焰效果做一下润色。

 

绘制和滤镜的步骤看起来非常复杂,但是它只是诸多滤镜和柏林噪声试验效果之一,试着修改一下源文件,看看你能否发现其他更好的效果。

原文链接:http://www.flashandmath.com/flashcs5/fire/index.html

posted @ 2013-11-25 00:53  ☆A希亿  阅读(840)  评论(0编辑  收藏  举报