Three.js(九)perlin 2d噪音的生成
噪音的目的是为了增加随机性,使事物看起来更真实。但是简单的使用随机函数 并不 自然,因为随机函数产生的值与值之间并不连续。 要构造一个连续的2d噪音,简单的想法可以是: 在一个平面上所有整数点位置赋一个随机的值, 而整数网格中的点 则采用插值的方式得到值。 这里有两个问题, 一是整数格子上的值如何给, 二是插值的方式。 perlin噪声的解决方式是: 整数格子上的计算一个叫做gradient的东西,在2d空间这个gradient是2维度向量, 它的分布具有各向同性的特点,也就是每个整数格子点都有相同的概率得到某个方向的gradient。 实现的时候, gradient可以从 8个方向的向量里面获取, 具体取哪一个是需要一个随机的过程的。。 [1, 0], [1, 1], [0, 1], [-1, 1], [-1, 0], [-1, -1], [0, -1], [1, -1], 获取一个点周围4个整数定点的 gradient之后, 将gradient和 4个点到该点的 向量 的内积 作为4个点的值, 接着需要对这4个值进行插值。 简单的2维 线性插值的方法是: 首先 沿 x方向 将 n00 n10 x插值, 再将 n01 n11 x插值, 最后将结果 沿y方向插值。 def mix(u, v, a): return u*(1-a)+v*a 但是这样插值结果不光滑, 可以调整插值的系数