Tag: perlin noise

从哪里开始体素引擎?

我一直在研究体素游戏已有一段时间了,但我所做的一切都是主菜单和Item系统。 现在是制作体素引擎的时候了。 我一直在寻找一些教程或电子书来教我这样,但我能找到的最好的是c ++中的某些教程,但我用Java制作我的。 我过去曾涉足c ++和c#,但翻译起来太难了,即它依赖于java没有的类。 我所知道的是,体素引擎有不同的方法,它们都是从渲染单个立方体开始的,Perlin和Simplex噪声可用于随机化地形生成。 如果有人能指出我正确的方向,大多数人赞赏。 我会每小时至少检查一次,因为有人觉得这个post已经死了。

Perlin噪音的输出范围

我正在研究相干噪声的各种实现中的一些(我知道有库,但这主要是为了我自己的启发和好奇心)以及如何使用它,并且我对原始的Perlin噪声问题有一个问题。 根据这个经常链接的数学常见问题解答 ,输出范围将介于-1和1之间,但我不明白该值是如何在该范围内的。 据我了解,算法基本上是这样的:每个网格点都有一个长度为1的相关随机梯度向量。 然后,对于每个点,对于所有四个周围网格点,您计算随机梯度的点积和从该网格点开始的矢量。 然后使用花式缓动曲线和线性插值将其降低到一个值。 但是,这是我的问题:这些点积有时会超出范围[-1, 1] ,并且因为你最终在点积之间进行线性插值,这并不意味着最终值将会有时,超出[-1, 1]的范围? 比如说,其中一个随机向量是(sqrt(2)/2, sqrt(2)/2) (长度为1)和(0.8, 0.8) (单位为正方形),你得到大约1.131的结果。 如果在线性插值中使用该值,则生成的值完全有可能大于1 。 事实上,通过我的直接实施,这种情况经常发生。 我在这里错过了什么吗? 作为参考,这是我在Java中的代码。 Vec是一个简单的类,可以进行简单的2d向量运算, fade()是缓动曲线, lerp()是线性插值, gradient(x, y)为您提供该网格点作为Vec的渐变。 gridSize变量为您提供网格的大小(以像素为单位): public double getPoint(int x, int y) { Vec p = new Vec(x / gridSize, y / gridSize); Vec d = new Vec(Math.floor(px), Math.floor(py)); int x0 = (int)dx, y0 = […]