我想在Visual Studio中使用OpenGL和C ++创建像地形的森林。自然,我想随机放置树木或灌木丛等物体,以使其看起来更自然。我想通过使用rand()函数来做到这一点,但是通过使用它,在程序运行时,我的对象不断在改变位置。我知道该程序处于循环中,并且由于rand()发挥了作用。我想问你们是否有一个很好的替代方法。我只想为每个对象创建一个随机的位置值,并且该值保持不变。这是存在此问题的代码的一小部分:

for (int i = -5.0; i < 5.0; i++){
    for (int j = -5.0; j < 5.0; j++){
        double k = i * 10.0 + ((rand() % 20 + 10) + ((rand() % 8 + 1) / 10.));
        double l = j * 10.0 + ((rand() % 20 + 10) + ((rand() % 8 + 1) / 10.));
        if (i % 2 == 0 && j % 2 == 0)
        {
            drvo(k, l);
        }
    }
}


我得到的任何帮助将不胜感激!

最佳答案

rand不是完全随机的,它是伪随机的。意味着给定相同的种子,rand将产生相同的值。

我建议使用srand为PRNG注入种子,并将其保存以备后用。

当您要再次渲染场景时,请使用保存的种子再次调用srand,并且rand调用序列应产生相同的结果。

关于c++ - OpenGL C++如何获得随机值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44254414/

10-13 07:25