我查看了 libnoise 源并找到了 ValuNoise3D 函数:
double noise::ValueNoise3D (int x, int y, int z, int seed)
{
return 1.0 - ((double)IntValueNoise3D (x, y, z, seed) / 1073741824.0);
}
int noise::IntValueNoise3D (int x, int y, int z, int seed)
{
// All constants are primes and must remain prime in order for this noise
// function to work correctly.
int n = (
X_NOISE_GEN * x
+ Y_NOISE_GEN * y
+ Z_NOISE_GEN * z
+ SEED_NOISE_GEN * seed)
& 0x7fffffff;
n = (n >> 13) ^ n;
return (n * (n * n * 60493 + 19990303) + 1376312589) & 0x7fffffff;
}
但是当我看到这个的时候,这对我来说是一种魔力。这实际上是如何工作的?我的意思是为什么写这篇文章的人取的是那些素数而不是其他素数?为什么会有这样的方程?他是如何决定使用这些方程式而不是其他方程式的?只是……这怎么理解?