我想在Visual Studio中使用OpenGL和C++创建类似地形的森林。当然,我想随意放置树木或灌木丛等物体,这样看起来更自然。我想通过使用rand()函数来做到这一点,但通过使用它,程序运行时,我的对象不断变化的位置。我知道程序在循环中,因为rand()是按照它的方式行事的。我想问你们是否有一个很好的替代方案。我只想为每个对象创建一个随机位置值,并且该值保持不变。这里有一小部分代码有这个问题:OpenGL C++如何获得随机值?
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())。这样,你的物体将被随机放置,但留在同一个地方。 –
尝试使用std :: uniform_real_distribution从C++ 11 像这里https://stackoverflow.com/questions/19665818/generate-random-numbers-using-c11-random-library –
@JeremyFriesner,我不我想我很了解你。我在渲染场景的函数之外添加了一些行: ' int c = rand()%20; int a = c; int d = rand()%10; INT B = d;' 而改变了代码一点点: ' 对(INT I = -5.0; I <5.0;我++){ \t \t对(INT J = -5.0;Ĵ<5.0; (k + 1)/ 10;其中k = 1 * 10 + a + 10 +(b + 1)/ 10。 (a + 1)/ 10;其中, \t \t \t如果(ⅰ%2 == 0 &&Ĵ%2 == 0) \t \t \t { \t \t \t \t DRVO(K,L); \t \t \t} \t \t} \t}' 这种方法行不通,因为它总是加载相同的值。我相信我在某个时候误解了你。 – Daelendil