通常,在生成无缝 Simplex 噪声时,策略是使用 4 维(过去使用 2-D Simplex 时这种策略对我来说效果很好),但是我正在尝试使用 1-D Simplex 生成无缝 GIF 循环噪声(仅对指定折线图中 Y 值的噪声感兴趣)。
我很好奇我是否误解了如何在一维中使事情变得无缝,或者我是否可能在逻辑上有错误。基本上,我正在生成一个二维数组,其中第一个维度是 Z 轴,第二个维度是该 Z 的点(xy 值)列表。我遍历每个 z 并简单地依次绘制每个顶点.
我注意到的是,当我达到最大 Z 值时,会出现明显的跳跃,表明我做错了什么(不是无缝的)。
我正在使用该fast-simplex-noise
库(我比 P5 的内置noise
函数更喜欢它)并将其指定为:
function setup() {
let freq = 0.005;
let octaves = 14;
_noise = new FastSimplexNoise({ frequency: freq, octaves: octaves });
// specify the points:
points = [];
step = 0;
maxSteps = 150;
let r = 1.0;
for (let z = 0; z < maxSteps; z++) {
let t = (1.0 * z) / maxSteps;
points[z] = [];
for (let x = o + 10; x < width - o - 10; x++) {
let _n = _noise.get4DNoise(x, z, r*cos(TWO_PI*t), r*sin(TWO_PI*t));
let _y = height/2 + 250*_n;
points[i].push({ x: x, y: _y });
}
}
}
在draw
函数中,我只需遍历points
列表中的每个顶点并跟踪z
每次绘制迭代的当前值。