0

私は大学のプロジェクトのために OpenGL で 3D 太陽系を作成していますが、月を生成しなければならないところまで来ました。惑星を周回する月を生成するのは簡単ですが、惑星の周りのランダムな位置で、私が言った量の月を生成するループを作成しようとしているので、それらすべての軌道は異なります。

for(int count = 0; count < 5; count ++)
{
    glPushMatrix();
    glEnable(GL_LIGHTING);
    glTranslated (rand() % 8+8, 0.0, 0.0); //FIRST 
    glRotated((GLdouble) spin, 1.0, 70, 0.0);
    glutSolidSphere(0.8, 20, 10);
    glPopMatrix();
}

これは私が思いついたものですが、月を何度も作成しているようです。それは私が指定した量を作成しますが、常にそれらを再作成します. 誰でもアイデアはありますか?

4

4 に答える 4

3

月が作成されたときに月の位置を保存し、惑星の周りを回転するときにこの位置を更新する必要があります。

あなたのコードは、現在書かれているように、実行されるたびにランダムな Translate を作成します。

簡単にするために、月を作成するプロセスを追加し、月を更新して惑星の周りを回転させます (おそらく、星の周りの回転を処理するコードが既にあるのでしょうか?)。次に、更新された太陽系をレンダリングします。

于 2012-11-20T16:10:51.987 に答える
0

おそらく、次のような構造またはクラスを作成する必要があります。

struct Moon
{
    float x, y, z;
    float rotAngle;
};

必要なだけ複雑にしてください

必要な量のオブジェクトを作成し (array/list/... を使用)、レンダリング ループの前にそれらの値を初期化します。

レンダリング ループでは、これらのオブジェクトすべてをループし、更新 (必要な場合) して、それらの値を使用して表示します。

于 2012-11-20T17:42:10.083 に答える
0

-loopのsrand(0)前に実行しforて、毎回同じ乱数シーケンスを取得します。

于 2012-11-20T17:22:30.647 に答える
0

しかし、月を何度も 描いているようです。

FTFY。OpenGLシーン グラフではありません。何らかの方法で内部に保存され、オンデマンドでユーザーに提示されるシーンを生成しません。OpenGL は描画API です。アニメーション ループで描画コードを呼び出しても、常にいくつかの新しいランダム パラメータを使用して描画すると、物事が飛び跳ねます。

解決策: シーン グラフが必要です。あなたの場合、初期パラメータを保存する単純なリストで十分です。刺激を与えたい場合は、特定の質量の惑星からの特定の距離に対する正しい軌道速度を決定することもできます.

于 2012-11-20T17:46:46.703 に答える