BLOG ENTRY

DisplacementMapFilterとperlinNoiseで外部画像を変形[AS3]

avatar

DisplacementMapFilterクラスBitmapDataクラスのperlinNoiseメソッド
を使って画像を変形エフェクトさせてみるサンプルコード。

This movie requires Flash Player 9

MyDisplacementMapFilter.as

package {
    import flash.display.Sprite;
    import flash.display.Loader;
    import flash.display.BitmapData;
    import flash.display.BitmapDataChannel;
    import flash.geom.Point;
    import flash.filters.DisplacementMapFilter;
    import flash.filters.DisplacementMapFilterMode;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.net.URLRequest;

    [SWF(width="440", height="270", backgroundColor="0xFFFFFF", frameRate="24")]
    public class MyDisplacementMapFilter extends Sprite {
        private var _bd:BitmapData;
        private var _pt:Point = new Point(0, 0);
        private var _imgW:Number = 0;
        private var _imgH:Number = 0;
        private var _baseX:int = 0;
        private var _baseY:int = 0;
        private const PERLIN_OCTAVES:Number = 1;
        private const COLOR_CHANNEL:Number = BitmapDataChannel.BLUE | BitmapDataChannel.GREEN;
        private const SCALE:Number = 15;

        public function MyDisplacementMapFilter():void {

            // 画像データ読み込み
            var loader:Loader = new Loader();
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
            loader.load(new URLRequest("http://blog.quall.net/wp-content/uploads/swf/efects/image1.jpg"));
            addChild(loader);

        }

        private function completeHandler(e:Event):void {
            _imgW     = e.target.width;
            _imgH     = e.target.height;
            _bd = new BitmapData(_imgW, _imgH);
            addEventListener(Event.ENTER_FRAME, enterFrameHandler);
        }

        private function enterFrameHandler(e:Event):void {
            _baseX = _imgW + ( Math.random() * 10);
            _baseY =  _imgH + ( Math.random() * 10);

            _bd.perlinNoise(
                            _baseX / 10,
                            _baseY / 200,
                            PERLIN_OCTAVES,
                            Math.floor(Math.random() * 10),
                            false,
                            true,
                            COLOR_CHANNEL,
                            false);

            var displacementMap:DisplacementMapFilter
                = new DisplacementMapFilter(
                            _bd,
                            _pt,
                            BitmapDataChannel.BLUE,
                            BitmapDataChannel.GREEN,
                            SCALE * 2,
                            SCALE * 10,
                            DisplacementMapFilterMode.CLAMP);

            filters = [displacementMap];
        }
    }
}

関連記事

  1. BitmapDataクラスのPerlinNoiseメソッドでエフェクト[AS3][filter]
  2. AS3で外部JSONデータ読み込みのカスタムイベント[AS3][JSON]
  3. AS3でXMLファイルの内容を読み込んで出力する[AS3]
  4. PV3Dの7種類のPrimitiveObject[as3]
  5. 外部SWFの埋め込みフォントを読み込み[AS3]

WRITE COMMENT


(required)


(required)


(required)

MENU