c++ - GLM 随机数生成器的线性程度如何?

标签 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

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

最佳答案

根据此处的来源:

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/

相关文章:

c++ - 不旋转包装矩形?

c++ - 为什么使用程序会导致我的形状消失?

c++ - 正确调用 glm::unproject() ,感到困惑

c++ - 使用 boost 信号编译 VS8 C++ 程序时出现问题

java - C++抽象类的多重继承

c++ - 处理小于cpu数据总线的数据类型。 (将c++转换为机器代码。)

mysql - 如何随机化单个 mysql 列?

Python 帮助 ---> 从文本文件中随机选择名称

python - 我如何随机选择一个数学运算符并用它提出重复出现的数学问题?

c++ - OpenGL - GLM 和 GLSL,它们有何不同?