前回に引き続き、以下の記事のコードを解説していきます。
今回はいよいよ3次元パーリンノイズの作成です。
高次元空間で円(閉じた曲線であればなんでもいい)を描くことで始点と終点の値を一致させ、無限ループの切れ目がわからないようにすることができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
// NoiseLoopクラスは、白ノイズを生成するクラスです。 // diameter、min、maxはそれぞれ、パーリンノイズを生成する際のパラメータです。 //3次元のパーリンノイズ空間を作成し、その中で半径diameterのを描くようにパラメータを変化させることで、ノイズの始まりと終わりを一致させています。 // cx、cyはパーリンノイズを生成するための乱数のシード値で、描く円の中心座標に対応します。 // NoiseLoopクラスのコンストラクタです。ここで二次元のパーリンノイズを定義します。 class NoiseLoop { // シード値であるcx, cyを乱数で設定する float diameter; //円の半径 float min, max; //生成するノイズの最小値と最大値 float cx; //円の中心座標 float cy; NoiseLoop(float diameter, float min, float max) { this.diameter = diameter; this.min = min; this.max = max; cx = random(1000); cy = random(1000); } // パーリンノイズを生成するメソッドを定義 float value(float a, float b, float speed) { // x方向の偏移量を計算する float xoff = map(cos(a), -1, 1, 0, diameter) + cx; // y方向の偏移量を計算する float yoff = map(sin(a), -1, 1, 0, diameter) + cy; // z方向の偏移量を計算する float zoff = b * speed; // 3次元Noise関数を使用してノイズを生成する float r = noise(xoff, yoff, zoff); // 雑音をminからmaxの範囲内にする return map(r, 0, 1, min, max); } } |
以上で3次元Perlin Noiseの実装は終了です。
次回はSpiralクラスの原型となるPerticleクラスの定義を解説します。
コメント