2012-05-24 26 views
7

私は3Dパーリンノイズアルゴリズムを低次元に適応させようとしていますが、私は推論を完全に理解していないので、勾配関数に問題があります。パーリンノイズ勾配関数

元のPerlin勾配関数は、hashと3次元座標(x, y, z)という4つの引数をとります。関数の結果は、次のようにhash mod 16の値に基づいて戻されます。

  • 0x + y
  • 1-x + y
  • 2x - y
  • 3-x - y
  • 4x + z
  • 5-x + z
  • 6x - z
  • 7-x - z
  • 8y + z
  • 9-y + z
  • 10y - z
  • 11-y - z
  • 12y + x
  • 13-y + z
  • 14y - x
  • 15:すべての組み合わせを一度表されるので011から-y - z

戻り値は、パターンの種類を作ります。しかし最後の4つは重複しています。なぜ彼らは最後の4つの戻り値に合うように選ばれましたか?そして、2つの(x, y)と1つの(x)の寸法を持つ類似のケースは何ですか?

答えて

9

...遅くていいですか? ;-)

「改善されたノイズ」インプリメンテーションの機能は、ベクトルx、y、zと擬似ランダム勾配ベクトルの間のドット積を計算します。

この実装では、勾配ベクトルは12のオプションから選択されます。 彼らは選択の均一性をドロップすると、私はこのような目に見える問題なくのみ4勾配ベクトルを用いた2次元Perlinノイズについてhash & 15

hash % 12以上を実行する高速であるため、数12及び14を追加します。

return ((hash & 1) ? x : -x) + ((hash & 2) ? y : -y); 
+1

答えをありがとう!私はいつも忘れられていた古い質問を救うために襲撃した英雄たちに信じられないほど感謝しています。 –