我尝试在Rust语言中制作2D Perlin噪音,如:https://en.wikipedia.org/wiki/Perlin_noise
中所述我的随机渐变函数如下:
fn random_gradient_vector(rng : &mut rand::Rng) -> (f64, f64)
{
let theta = rng.next_f64() * 2.0 * 3.1415926536;
return (theta.cos(), theta.sin());
}
我的插值功能:
fn interpolate(a : f64, b : f64, x : f64) -> f64
{
let mut w = x*x*x*(x*(x*6.0 - 15.0) + 10.0);
return a * (1.0-w) + b * (w);
}
结果,充其量:
我做错了什么导致清晰可见的网格线?我想到了三种解决方法:
1)我需要找到的代码中存在一个错误。 2)尝试在噪声中添加不同的八度音程,也许每个都被转换以消除伪像。 3)尝试不同的噪声算法。
史蒂夫
答案 0 :(得分:1)
"块状文物"如果距离矢量计算不正确,则会发生。他们应该从角落指向点:
var d0 = vec2.dot(vx0, [u,v]);
var d1 = vec2.dot(vx1, [u-1,v]);
var d2 = vec2.dot(vx2, [u,v-1]);
var d3 = vec2.dot(vx3, [u-1,v-1]);
正确的结果:https://jsfiddle.net/f65w5jqa/
块状工件(uv和交换的工件):https://jsfiddle.net/p17fh1qp/