我正在制作一个 3d perlin 噪声发生器。重要的是,坐标是种子,这样它每次都会给我相同的随机值(永远不会存储噪声)。这是我基于作为坐标的种子生成随机值的函数:
__forceinline float getRandomField(const vec3& Position) const
{
uint32_t seed = uint32_t(Position.x);
seed <<= 8;
seed ^= 0xE56FAA12;
seed |= uint32_t(Position.y);
seed <<= 8;
seed ^= 0x69628a2d;
seed |= uint32_t(Position.z);
seed <<= 8;
seed ^= 0xa7b2c49a;
srand(seed);
return (float(int(rand()%2001) -1000)/1000.0f);
}
结果(x,y 平面中的切片):
奇怪的是,这给了我一个模式。显然,我不知道我在做什么。我虽然应用了一些奇怪的异或值并将位移到随机种子中会给我一个随机数。显然我错了。
从坐标创建随机值而不产生模式的最佳方法是什么?