我正在编写一个着色器,偶尔会使2D地图上的某个点闪烁。(“闪光”只是更亮色的像素。)我希望这些闪烁的块在(无限的)平面上随机且均匀分布,但基于X和Y坐标,我希望闪烁是确定性的。我尝试从坐标中创建种子,并从该种子创建Java
我首先尝试模仿我的
然后我尝试通过连接坐标来创建种子,如下所示:
这似乎也会导致数据呈现出模式,尽管这种模式不太明显。所选坐标出现在行中,而不是均匀分布。
我避免使用MD5或其他加密哈希算法,因为我担心会影响性能。
Random
,但我的尝试迄今为止导致了可识别的模式。由于这个函数将经常调用(数百万次),因此性能至关重要。我首先尝试模仿我的
hashCode()
实现,它使用质数乘法器来避免冲突。这导致地图上出现明显的裂口,其中一系列点共享相同的种子。然后我尝试通过连接坐标来创建种子,如下所示:
long seed = ((long) x << 32) | (long) y;
Random rand = new Random(seed);
这似乎也会导致数据呈现出模式,尽管这种模式不太明显。所选坐标出现在行中,而不是均匀分布。
我避免使用MD5或其他加密哈希算法,因为我担心会影响性能。