1

我是世界生成和用于它们的算法的新手,所以我希望有人能给我一些有用的解释或代码或两者兼有,或链接到我在寻找解决方案时错过的一些资源。

如何使用 OpenSimplexNoise 获得更高的细节级别?

我知道在像 PerlinNoise 这样的算法中,它可以通过频率和相加倍频来完成。那么如何使用 OpenSimplexNoise 实现这样的目标呢?

这是我已经得到的:

    private static final int WIDTH = 512;
private static final int HEIGHT = 512;
private static final double FEATURE_SIZE = 64;

public static void main(String[] args)
    throws IOException {

    OpenSimplexNoise noise = new OpenSimplexNoise(1233313l);
    BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_BYTE_INDEXED);
    for (int y = 0; y < HEIGHT; y++)
    {
        for (int x = 0; x < WIDTH; x++)
        {
            double value = noise.eval(x / FEATURE_SIZE, y / FEATURE_SIZE);
            int rgb = 0x010101 * (int)((value + 1) * 127.5);
            image.setRGB(x, y, rgb);
        }
    }
    ImageIO.write(image, "png", new File("noise1.bmp"));
}

我怎样才能实现它以获得更平坦的森林等结果?

4

1 回答 1

1

OpenSimplexNoise 不直接提供您描述的功能,因此您需要自己提供。基本上,您会反复生成一层噪声并将其添加到最终结果中。进一步来说:

  • 八度音阶的数量由您循环的次数控制。
  • 通过将给定层的值乘以某个数量来控制层的幅度。幅度通常来自倍频程数;最常见的例子是使用1/(2^n)wheren是当前八度的数字。
  • 可以通过调整采样间隔来控制频率。对于 OpenSimplexNoise,您可以通过将x y z参数乘以一定数量来做到这一点。同样,这通常是从八度数得出的,最常见的例子是2^n.

调整八度音阶、幅度和频率值的数量更像是一门艺术而不是一门科学,并且很大程度上取决于您的情况。尝试一下并研究其他人用来找到适合您项目的方法。使用上述标准幅度和频率的 6 个八度音阶,我得到了很好的结果。

于 2016-09-02T20:06:59.483 回答