2012-02-07 22 views
0

コースワークの場合、太陽系の実用モデルを構築する必要があります。私は私の惑星(球体)を実装していますが、惑星の軸を上下の線で描かなければなりません。OpenGL図面 "軸"

GL_LINESを使用しても動作していないようですが、おそらくこのプロジェクトの規模(惑星の半径は139000000+)のためです。

簡体例:

void drawAxis(int n) 
{ 
    /* Draws the axis for body "n" */ 
    glColor3f(1.0,0.0,0.0); 
    glBegin(GL_LINES); 
    glVertex3f(0, bodies[n].radius, 0); 
    glVertex3f(0, bodies[n].radius*2, 0); 
    glEnd(); 

    glColor3f(0.0,1.0,0.0); 
    glBegin(GL_LINES); 
    glVertex3f(0, -bodies[n].radius, 0); 
    glVertex3f(0, -bodies[n].radius*2, 0); 
    glEnd(); 
} 

void drawBody(int n) 
{ 

    if(n==0) { 
    /* Draws body "n" */ 
    //glRotatef(bodies[n].axis_tilt, 1.0, 0.0, 0.0); 

    //Scale and position 
    glTranslatef(0.0, 0.0, 0.0); 
    glScalef(SCALE,SCALE,SCALE); //why already scaled? 

    //Axis 
    drawAxis(n); 

    //r g b - colour (red, green, blue) 
    glColor3f(bodies[n].r,bodies[n].g,bodies[n].b); 

    //radius - size of body (km) 
    glutSolidSphere (bodies[n].radius/SCALE, 50, 50); 
    } 
} 

は描画:

SolarSystem

は、私がここで重要な何かが足りないのですか?

この球面上で軸を描くのに最適な "回避策"は何ですか?

+5

「惑星の半径は139000000+です」なぜですか?なぜ惑星の半径は1.39ではないのですか? Scale is OpenGLはあなたが望むものです。メートル、センチメートル、フィート、マイル、キロメートルなどではありません。それはまさにあなたが望むものです。だからあなたのために物事を簡単にするようにスケールを選んでください。 –

+0

シンプルではないと思ったので、私のデータファイルでKM –

+0

こんにちはPezさんに連絡してください。あなたが自分のことを言ったように、ラインには実際には「幅」がありませんが、それは1つのカメラショットに数十万キロメートルに収まるようにしようとすると無限に小さなものをレンダリングしていることを意味します。無限に細い線が表示されないのは驚くことではありません; –

答えて

2
glScalef(SCALE,SCALE,SCALE); //why already scaled? 

... 

glutSolidSphere (bodies[n].radius/SCALE, 50, 50); 

これは意味をなさない。なぜあなたは均一な尺度を適用し、球の尺度を分割して尺度を元に戻すのですか?スケールを一切持たず、ちょうどbodies[n].radiusを使用する方が理にかなっていませんか?

これは問題の原因です。球を描くときに不要なスケールを元に戻しますが、軸を描くときにを元に戻すことはできません。不必要なスケールを取り除くと、それがうまくいく可能性が高くなります。

+0

これはなぜ軸が確実に存在しないのか説明していませんか?私は線がスケールの影響を受けないことに気づく前にスケールアップしようとしていました(ちょうど2ポイントなので) –

+0

これを削除すると問題は変わりませんが、アイデアのおかげです。 –

+0

@PezCuckow:差。あなたはあなたの軸上でカウンタースケールをしなかったので、球の表面上に位置しません。単位半径を持つglScaleだけを使用するか、glScaleを使用せず、ジオメトリデータにスケールを適用します。 – datenwolf