0

我得到了一个 perlin 噪声算法和一个 opensimplex 噪声算法,它根据给定的 X 和 Y 值返回一个双精度值。我正在设计软件,我想知道如何:

  • 使用 0-1 双精度值缩放柏林噪声
  • 允许以不同的分辨率(即 1024、2048)构建 perlin,但仍保持比例,但添加额外的细节。
  • 允许用户更改世界大小,这也会影响比例

我目前的代码:

double scale = ((((Double) parameters.get(SCALE).getValue() * 10) + 0.25) * ProjectSettings.WORLD_SIZE) /  ((double) resolution / 1000);
double x = 0;
double y = 0;
OpenSimplexNoise noise = new OpenSimplexNoise((Long) parameters.get(SEED).getValue());
for(int n = 0; n < resolution; n++) {
    x += scale;
    for(int m = 0; m < resolution; m++) {
        y += scale;
        values[n][m] = noise.generateOpenSimplexNoise(x, y, (Double) parameters.get(PERSISTENCE).getValue(), (Integer) parameters.get(OCTAVES).getValue());
    }
}
4

1 回答 1

-2

如果要更改 Perlin 噪声图像的分辨率,请更改高度和for 循环中值。为了进行缩放,您必须将 Perlin 噪声方法的第一个和/或第二个参数乘以一些在您需要缩放时会发生变化的变量。时间价值可能非常适合于此。请参阅下面的代码示例。

time += 0.01;
// Change height and width values to change resolution
for(int y = 0; y < height; y++){
    for(int x = 0; x < width; x++){
        double dx = (double) x / MainWindow.height;
        double dy = (double) y / MainWindow.height;

        // Perlin noise method call
        // In order to scale, you have to multiply current values 
        // by time or other variable, which change would cause the zoom.
        double noise = noise(dx * time, dy * time);
    }
}
于 2017-03-02T15:28:13.487 回答