将经典的Perlin Noise移植到JavaScript:获取周期性模式。为什么? (JsFiddle示例)

时间:2012-05-09 06:27:33

标签: javascript noise perlin-noise

我尝试将经典的Perlin Noise(src:http://mrl.nyu.edu/~perlin/doc/oscar.html#noise)移植到JavaScript中 - 用于科学目的。我不知道为什么,但我的代码生成了周期性模式而不是随机模式。

您可以在此处找到我的完整代码,其中包含绘制到画布的示例(向下剥离到一维):http://jsfiddle.net/YL77D/

我认为问题可以在“noise1”函数中找到:

sx = s_curve(rx0);

u = rx0 * g1[ p[ bx0 ] ];
v = rx1 * g1[ p[ bx1 ] ];

return lerp(sx, u, v);

如果我的x-seed是10.1,10.2,10.3等,我认为你和v应该是相同的数字(你应该基于10而v应该基于11 - 所以sx介于两者之间)。我对吗?但在我的代码中,你和v总是不同。

有什么想法吗?非常感谢你。

1 个答案:

答案 0 :(得分:1)

一个问题可能是您使用Math.Random的方式:

p[i] = p[j = Math.floor(Math.random() % B)];

在javascript Math.Random中返回0到1之间的浮点值 C中的random返回0到RAND_MAX之间的整数值。

p[i] = p[j = random() % B];