GLM随机数生成器的线性如何?

时间:2014-04-05 17:37:29

标签: c++ random glm-math

使用GLM 0.9.5.1 我在启动时使用glm :: linearRand(-1.0f,1.0f)生成随机数。看起来每次重新启动应用程序时,值总是相同的。也许我在GLM中缺少一个函数来重新设定随机数生成器?

看一下这段代码:

std::cout << glm::linearRand(-1.0f, 1.0f) <<  std::endl;
std::cout << glm::linearRand(-1.0f, 1.0f) <<  std::endl;
std::cout << glm::linearRand(-1.0f, 1.0f) <<  std::endl;
std::cout << glm::linearRand(-1.0f, 1.0f) <<  std::endl;

0.188513
0.428694
0.372967
-0.419843

这些值始终相同。我该如何重新种植?

1 个答案:

答案 0 :(得分:3)

根据这个消息来源:

https://github.com/Groovounet/glm/blob/master/glm/gtc/random.inl#L32

随机数生成器使用std::rand() - 换言之,C运行时库的随机数生成器。实现的程度取决于您使用的实际C运行时库。但它通常是为了速度和速度而写的。而不是&#34;准确性&#34; (换句话说,它对于简单的游戏来说可能没问题,但是如果你想要在商业敏感的环境中保持某些东西[例如玩家赢得真钱的在线扑克],你可能想要更好地使用它)。

但是,每次运行程序时获得相同值的原因是因为C运行时库的默认行为是以相同的种子开始。这对于测试目的很有用,您可能希望每次运行代码时行为都相同。在代码开始时调用srand(time(0));一次将根据当前时间将种子放入随机数生成器。它并不完美,但几分钟后它会发生很大变化,并且每次都会产生一组相当不错的随机数字#34;如果你想要&#34;更随机的种子&#34;,你可以使用其他方法,例如将当前时间写为字符串并用md5对其进行哈希处理。