0

我已经看到了许多噪声实现,例如perlinsimplex noiseto procedural terrain generation,它们似乎都使用 256 个排列值。为什么是这样?使用超过 256 会有什么影响?

4

1 回答 1

1

您可以使用任意数量的排列值。首选 2 的幂的原因是,计算 N^2 的模数更便宜。

原因是:

value % (N^2)

相当于

value & (N^2 - 1)

而且计算按位 & 而不是 % 便宜得多。

例如,在您的代码中,您可以这样写:

int v = perm[(x + perm[y % 256]) % 256];

或者

int v = perm[(x + perm[y & 255]) & 255];

两者都给你相同的结果,但第二种方法更快。

当然,可以为此使用任何 2 的幂。我认为选择256的原因是它在伪随机数的多样性和低内存消耗之间取得了很好的平衡。

于 2015-09-15T16:48:32.900 回答