3D パーリン ノイズ ジェネレーターを作成しています。毎回同じランダム値が得られるように、座標がシードであることが重要です (ノイズが保存されることはありません)。これは、座標であるシードに基づいてランダムな値を生成するための私の関数です:
__forceinline float getRandomField(const vec3& Position) const
{
uint32_t seed = uint32_t(Position.x);
seed <<= 8;
seed ^= 0xE56FAA12;
seed |= uint32_t(Position.y);
seed <<= 8;
seed ^= 0x69628a2d;
seed |= uint32_t(Position.z);
seed <<= 8;
seed ^= 0xa7b2c49a;
srand(seed);
return (float(int(rand()%2001) -1000)/1000.0f);
}
結果 (x,y 平面のスライス):
奇妙なことに、これは私にパターンを与えます。明らかに、私は自分が何をしているのかわかりません。私はそれがいくつかの奇妙なxor値を適用し、ランダムシードにビットシフトすると乱数が得られると思います。どうやら私が間違っていたようです。
パターンにならずに座標からランダムな値を作成する最良の方法は何ですか?