BLOG ENTRY

BitmapDataクラスのPerlinNoiseメソッドでエフェクト[AS3][filter]

actionscript3


filterのBitmapDataクラスのPerlinNoiseメソッド

を使ってテクスチャーをエフェクトさせてみるサンプルコード。

This movie requires Flash Player 9

MyPerlinNoise.as

/*
http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/flash/display/BitmapData.html#perlinNoise%28%29
*/
package {
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.BitmapDataChannel;
    import flash.geom.Point;
    import flash.geom.Rectangle;
    import flash.display.Sprite;
    import flash.events.Event;

    [SWF(width="440", height="270", backgroundColor="0xFFFFFF", frameRate="24")]
    public class MyPerlinNoise extends Sprite {
        private var _bm:Bitmap;
        private var _bd:BitmapData;
        private var _width:Number = 440; //BitmapDataWidth
        private var _height:Number = 270; //BitmapDataHeight

        //perlinNoise() args
        private var _nX:Number = 0;             //x 方向で使用する周波数。
        private var _nY:Number = 0;             //y 方向で使用する周波数。
        private var _octaves:Number = 1;         //numOctaves このノイズを作成するために組み合わせるオクターブ (つまり個々のノイズ関数) の数
        private var _channels:uint;             //color channelOptions 任意の 4 つのカラーチャンネル値の組み合わせである数値
        private var _seed:int;                     //randomSeed ランダムシード (乱数の種) として使用する数値
        private var _offset:Array = new Array(); //各オクターブの x オフセットと y オフセットに対応するポイントの配列

        private var _speed:Array = new Array();

        public function MyPerlinNoise () {
            _bd = new BitmapData(_width, _height, true, 0xFFFFFF);
            _bm = new Bitmap(_bd);
            addChild(_bm);
            doPerlinNoise();
        }

        private function doPerlinNoise():void{
            _seed = Math.floor(Math.random() * 10);
            _channels = BitmapDataChannel.RED | BitmapDataChannel.BLUE | BitmapDataChannel.GREEN;

            for (var i:Number = 0; i < _octaves; i++) {
                _offset[i] = new Point(Math.random() * _width / 2, Math.random() * _height / 2);
                _speed[i] = new Point(Math.random() * 2, Math.random() * 2);
            }

            _nX = _width / 2 * Math.random();
            _nY = _height / 2 * Math.random();

            addEventListener(Event.ENTER_FRAME, perlinNoiseEnterFrame );
        }

        private function perlinNoiseEnterFrame(e:Event):void {

            for (var i:Number = 0; i < _octaves; i++) {
                _offset[i].x += _speed[i].x;
                _offset[i].y += _speed[i].y;
            }

            _nX += _width / 1000;
            _nY += _width / 1000;

            _bd.perlinNoise(_nX, _nY, _octaves, _seed, false, true, _channels , false, _offset);
        }
    }
}

関連記事

  1. DisplacementMapFilterとperlinNoiseで外部画像を変形[AS3]
  2. papervision3Dをインストールしてサンプル(正六面体cube)を動かすまで[AS3]
  3. PV3Dの7種類のPrimitiveObject[as3]
  4. AS3でXMLファイルの内容を読み込んで出力する[AS3]
  5. AS3で外部JSONデータ読み込みのカスタムイベント[AS3][JSON]

WRITE COMMENT


(required)


(required)


(required)

MENU