perlinNoise (2)
2008/02/02 23:24 - AS3.0
ところでLiveDocs や先人の皆様の記録を拝見したところによると、perlinNoise で生成される模様は動かすことができるという。
何でも perlinNoise の最後の引数である配列 offsets を enterFrame のようなタイミングで逐次更新することでそれが実現されるとか。
てなわけでサンプルを作って、動く様子を見てみます。
onEnterFrame の前に、まず offsets を生成する必要があります。
offset の各配列に格納するのは Point オブジェクト。
この Point オブジェクトはオクターブに対して影響を与えるそうなので、offsets.length = octaves がイイ感じのようです。
先賢の記録を参考に Point の座標は、x座標には 0 ~ BitmapData.width の範囲の数値のいずれか、y座標には 0 ~ BitmapData.height の範囲の数値のいずれか、となるようにしました。
for ( var i:int=0; i<octaves; i++ ) { offset[i] = new Point( Math.random()*w , Math.random()*h ); }
そして onEnterFrame のタイミングでoffets の各要素である Point の座標を移動すると、それに応じて perliNoise の模様が動く。
for ( var i:int=0; i<octaves; i++ ) { offset[i].x += 数値; offset[i].y += 数値; }
以下のサンプルでは -10 ~ 10 までの値を 2毎にスライダーで変更します。
offX を offsets 要素の Point.x に、offY を offsets 要素の Point.y に加算します。
サンプルを見てのとおり、Point.x に加算する値が正の数ならば模様は右から左へ向かって、負の数ならば模様は左から右へ向かって動きます。
Point.y に加算する値が正の数ならば下から上に向かって、負の数ならば上から下に向かって動きます。
Point.x への加算と Point.y への加算を組み合わせると斜めに動くわけですね。
シリーズ