我是世界一代以及用于它们的算法的新手,所以我希望有人能给我一些有用的解释或代码,或两者兼而有之,或链接到我在寻找解决方案时错过的某些资源。
如何使用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"));
}
以及如何才能使森林等获得更平坦的结果?
最佳答案
OpenSimplexNoise不直接提供您描述的功能,因此您需要自己提供它。基本上,您会反复生成一层噪声并将其添加到最终结果中。进一步来说:
八度的数量由循环的次数控制。
通过将给定层的值乘以一定量来控制层的振幅。幅度通常从八度数得出。最常见的示例是使用1/(2^n)
,其中n
是当前八度的编号。
可以通过调整采样间隔来控制频率。对于OpenSimplexNoise,您可以通过将x y z
参数乘以一定数量来实现。同样,这通常是从八度数得出的,最常见的例子是2^n
。
调整八度,数量和频率值的数量是一门艺术,而不是一门科学,并且很大程度上取决于您的情况。尝试一下,研究其他人用什么来找到适合您的项目的东西。使用上述标准幅度和频率的6个八度音阶,我得到不错的结果。