前回に引き続き、以下の記事のコードを解説していきます。
今回はいよいよ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クラスの定義を解説します。

 
       
       
       
       
  
  
  
  


コメント