我正在制作一个3d珀林噪音发生器。坐标是种子很重要,因为它每次都给我相同的随机值(噪音永远不会被存储)。这是我的用于基于种子这是坐标产生随机值功能:如何在制作随机珀林噪音时避免图案
__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平面):
古怪足够,这给我是一种模式。显然,我不知道我在做什么。我虽然应用了一些奇怪的异或值,并且随机种子的位移会给我一个随机数。显然我错了。
什么是最好的方式来创建一个坐标随机值没有它导致了一个模式?
A *慢*的方式将散列的3个位置的串联[例如哈希你的种子忽略XOR位](使用说md5),并拉出最低的2个字节。虽然会工作。 –
我必须(相对)快速。我对md5一无所知,但是我看到一些md5生成器的代码在536行上。这是缓慢的方式。 – bofjas
这是一个有趣的俄勒冈州噪声pdf http://web.engr.oregonstate.edu/~mjb/cs519/Handouts/noise.1pp.pdf –