作者cjcat2266 (CJ Cat)
看板Flash
标题[心得] 来谈一下 能够产生水波特效的 DisplacementMapFilter
时间Sat May 19 00:56:03 2007
2632篇提到 神鬼奇航三 某活动网站的水波特效
後来我去 FlashKit 论坛察了一下资料
总算察到了 "realistic ripple effect" 的常见作法
主要都是利用 Flash 里面的 DisplacementMapFilter
这是 Flash 的七个 "可以手动调整的 Filter" 以外的一个
在使用 DisplacementMapFilter 的时候需要提供一个 BitmapData 来做运算
这篇先讲一下 DisplacementMapFilter的运作原理
如果觉得太复杂...可以直接看下一篇的特效应用方式和使用结果
下一篇待会儿补上
--------------------------------------本文开始--------------------------------------
DisplacementmapFilter 藉由读取的 BitmapData 资料来把一个图片的像素搬移位置
每个像素搬移的方式不同就会造成 "图片的扭曲效果"
DisplacementMapFilter 所使用的公式是下面这条:
(不要被他丑陋的外表吓到,我下面会尽量简单地解释)
dstPixel[x, y] = srcPixel[x + ((componentX(x, y) - 128) * scaleX) / 256,
y + ((componentY(x, y) - 128) * scaleY) / 256]
(以上的公式意思是把 srcPixel 搬移到 dstPixel 所使用的公式)
以下开始解说:
先来解释一下代表 color channel 的 componentX, componentY
在 Flash 里面所谓的 color channel 有分四个
也就是 Red, Green, Blue, Alpha
所对应到的 channel value 是 1, 2, 4, 8
要指复数个 color channels 的话,把两个数字加起来就可以了
像是 1 + 4 + 8 == 13 → 13 就直接代表 R, B, A 三个 channels
(各种组合方式都不会产生同样的数字)
又 RGBA 颜色分为 256 种量值大小,取一半就是128
componentX, componentY 所要参考的就是
被参考的 BitmapData 上面座标为 (x, y) 的像素的 color channel
比方说 componentX == 1 就代表要参考 BitmapData 上面的 Ren channel 就好
还有 scaleX, scaleY 则是设定像素搬移的比率
假如在被参考的 BitmapData 中 scaleX == 10, componentX(10, 10) == 1
然後这 BitmapData 在 (10, 10) 的 Red 值是 256
则使用这个 DisplacementManFilter 的物件
它的 (10, 10) 像素就会被往右搬移搬移 ((256 - 128)/128)*10 == 10 像素
所以利用外部汇入或者 AS 绘制不同的参考 BitmapData
可以产生多样的 DisplacementMapFilter 变形特效
--------------------------------------本文结束--------------------------------------
嗯...我表达能力似乎不太好,看得雾煞煞的话我先道歉...
或者有兴趣的人可以看一下我参考的 FlashKit 论坛文章:
http://0rz.tw/0f2DM
--
Gallery
http://cjcat2266.deviantart.com
MSN
[email protected]
Yahoo
[email protected]
俺、シージェーケット参上!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.228.81.184
1F:推 VV11:推!! 05/19 01:22
2F:推 etrexetrex:推!! 05/19 09:25
3F:推 liveinlow:推!! 05/19 11:33
4F:推 IVicole:推~~ 05/28 15:43
※ 编辑: cjcat2266 来自: 61.228.89.24 (10/09 13:38)