使用 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
这些值始终相同。我该如何重新播种?
最佳答案
根据此处的来源:
https://github.com/Groovounet/glm/blob/master/glm/gtc/random.inl#L32
随机数生成器使用 std::rand()
- 换句话说,C 运行时库的随机数生成器。实现的效果如何取决于您使用的实际 C 运行时库。但它通常是为了“速度”而不是“准确性”而编写的(换句话说,对于简单的游戏来说可能没问题,但如果您想要在商业敏感的环境中保持稳定的东西[例如玩家赢得真钱的在线扑克],您可能想使用更好的东西)。
但是,每次运行程序时获得相同值的原因是因为 C 运行时库的默认行为是使用相同的种子启动。这对于测试目的很有用,您可能希望每次运行代码时都有相同的行为。调用srand(time(0));
一旦在代码开始时,就会根据当前时间将种子放入随机数生成器中。它并不完美,但几分钟后它会发生很大的变化,并产生相当好的“每次新的随机数集”。如果您想要“更多随机种子”,您可以使用其他方法,例如将当前时间写入字符串并使用 md5
对其进行哈希处理。 , 也许。
关于c++ - GLM 随机数生成器的线性程度如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22884345/