私は作っているゲームのデータを生成するためにパーリンノイズ関数を使用していますが、何らかの理由で別の入力に対して同じ結果を返すことがあります。私はFBMの機能でこれをデバッグしようとしているのに4時間を費やしましたが、それを理解できなかったので、Ken Perlinの改善されたノイズ機能を試しました。同じことが起こります。Perlin異なる入力で同じ結果を返すノイズ関数
これはなぜですか?それを修正するための良い方法は何ですか?私ができる唯一のことはx、y座標に.6473のような小数点の値を追加することですが、配列内で値が繰り返されるなどの他の問題が発生しました。
ここにいくつかのテストコードがあります。ノイズ値で満たされた2つの異なる2D配列を作成しようとしています。 xとyの入力はゲームの座標です。 '* *'の後に、これらの値を大きくしないと、両方の配列がすべて0で埋められます。この例では、座標(0.0、-768.0)と(-1024.0、-768.0)はまったく同じノイズ値を返します。私のゲームでは、9つの異なる座標が同じ値を返します。私はこの試験のために使用してい
Perlinノイズ関数はhere
public class TestPerlinMain
{
public static void main(String[] args)
{
int seed = 532434;
//create first noise array
double x = 0.0; //x-coordinate
double y = -768.0; //y-coordinate
float z = 10.0f;
double[][] test = new double[15][15];
System.out.println("Noise Array 1: ");
for(int i = 0; i < test.length; i++)
{
for(int j = 0; j < test[i].length; j++)
{
test[i][j] = ImprovedNoise.noise(x + (j * 64.0), y + (i * 64.0), 10.0);
x += .314f;//************
System.out.print(test[i][j] + " ");
}
y += .314f;//***********
}
System.out.println();
//create 2nd noise array
double x2 = -1024.0; //x coordinate
double y2 = -768.0; //y coordinate
float z2 = 10.0f;
System.out.println();
double[][] test2 = new double[15][15];
System.out.println("Noise Array 2: ");
for(int i = 0; i < test2.length; i++)
{
for(int j = 0; j < test2[i].length; j++)
{
test2[i][j] = ImprovedNoise.noise(x2 + (j * 64.0), y2 + (i * 64.0), 10.0);
x2 += .314f;//*************
System.out.print(test2[i][j] + " ");
}
y2 += .314f;//************
}
System.out.println();
}
私はすべてにあなたを試してみました私はzを非整数値にして同じ結果を得ました。ノイズ(j/4、i/4、z)を提案して同様にノイズをスケーリングしてみました。また、サイズが256x256のタイルか256タイルを持っている配列を意味するのですか? – theDazzler
最後の段落では、雑音関数が256(x、y、z) (1,3)の値は、(257,259)または(1,769)または一般的に(x + 256n、y + 256m)の値と同じです。1024と768は、もちろん、2番目の配列は最初の配列と一致します。 –
私が家に帰ると、私はそれをチェックします。とにかく私はFBM関数ですが、私はテスト用にこれを使用していました。私は昨晩、いくつかの変更を加えることでそれを稼働させましたが、それは理想的ではないと思います。 – theDazzler