我正在使用 perlin 噪声函数为我正在制作的游戏生成数据,但由于某种原因,它不断为不同的输入返回完全相同的结果。我花了大约 4 个小时试图在我的 FBM 函数上调试它,但无法弄清楚,所以我尝试了 Ken Perlin 改进的噪声函数,同样的事情发生了。
有人知道为什么是这样吗?有什么好的方法来解决它?我唯一能做的就是在 x 和 y 坐标上添加一个像 0.6473 这样的十进制值,这有帮助,但也引入了其他问题,例如在数组中重复的值。
这是一些测试代码。我正在尝试创建两个填充有噪声值的不同 2D 数组。x 和 y 输入是我游戏中的坐标。在它们后面带有 ' * * ' 的行上,如果我不增加这些值,两个数组都将被全零填充。在示例中,坐标 (0.0, -768.0) 和 (-1024.0, -768.0) 返回完全相同的噪声值。在我的游戏中,9 个不同的坐标返回相同的值。
我用于此测试的 Perlin Noise 函数在这里
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();
}