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()をもう一度呼び出すのではなく)その場所の値をどこかに保存してください。そうすれば、あなたのオブジェクトはランダムに配置されますが、同じ場所にとどまります。 –
C++のstd :: uniform_real_distributionを試してみてください。はこちらです。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; I ++){ ため\t \t(INT J = -5.0; J <5.0。 j ++){ \t \t \t double k = i * 10.0 + a + 10 +(b + 1)/ 10。 \t \t \t double l = j * 10.0 + b + 10 +(a + 1)/ 10。 \t \t \t IF(I%2 == 0 && jの%2 == 0) \t \t \t { \t \t \t \t drvo(K、L)。 \t \t \t} \t \t} \t} ' それは常に同じ値をロードするため、この方法では動作しません。私はある時点であなたを誤解したと確信しています。 – Daelendil