DisplacementMapFilterの話2
DisplacementMapFilterのcomponentYに設定したチャンネルを
多めにしたノイズの画像を次々と切り替えながらマッピングに使用すれば
炎のようなエフェクトになります
DisplacementMapFilterの話
前にも出した水面エフェクトなんですが
2つのオリジナルクラスの組み合わせでやってます
import simplizer.graphic.Map
import simplizer.movie.Effect
var map=addChild(new Map())
var eff=addChild(new Effect(orgMC))
eff.displaceMap=map
eff.displaceWeight=30
map.waterDistor()
eff.effectColor=Effect.fade(0)
ファイルに書くコードはこのぐらい
まあクラスのほうがないと意味ないんですが
前にも書いたように500行近いので
水面エフェクトの原理的な話だけでも、と
水面エフェクトでメインになるのはDisplacementMapFilter
フォトショップの置き換えフィルターにあたるものですが
フォトショップがデフォルトでRがx座標の変換
Gがy座標の変換に割り当てられてるのに対して
フラッシュのDisplacementMapFilterはデフォルトでは
なにも割り当てられてません
僕の場合はフォトショップに合わせる形で割り当ててます
それでMapの色はベースで0x888800で塗りつぶしになっていて
こういう黄土色みたいな色になってます
そのMapを元にBitmapDataを作って
下のような関数に渡してDisplacementMapFilterを生成してます
public static function displace(map:BitmapData,xW:Number=100,yW:Number=100,C:uint=0xFFFFFFFF):DisplacementMapFilter {
var dmf=new DisplacementMapFilter();
dmf.mapBitmap=map;
dmf.scaleX=xW;
dmf.scaleY=yW
dmf.componentX=1;
dmf.componentY=2;
dmf.mode=DisplacementMapFilterMode.COLOR
dmf.alpha=(C&0xFF000000)/0xFF000000
dmf.color=(C&0x00FFFFFF);
return dmf;
}
Rをx、Gをyで使い、ラップも引き延ばしもしないのは
このクラスライブラリの中でお約束みたいになってるので
mapBitmap、scaleXとscaleY、補完色ARGB値の4つだけで
DisplacementMapFilterを作れるようにしてます
DisplacementMapFilterにつかうmapBitmapを作るのには
GradientGlowFilterとかBevelFilterとかを上手く使うと効率いいかと思います
この水面エフェクトでもBevelFilterをつかっています