2009-03-24 14 views
2

以下は、NEHE Pr​​oduction(レッスン25)からコピーしたコードの全長です。 私はちょうど遊んでいましたが、各ポイントを変更することはできません。個々の球も円柱もありません。
どういうわけか私の調整をしたときに、それらは想定されている方法で配置されず、回転しません。
このチュートリアルでは、後でライトを追加する予定です。ポイントをシェイプに変換するのに助けが必要

任意の助けを事前に

感謝=]

int InitGL(GLvoid) 
{ 
    glBlendFunc(GL_SRC_ALPHA,GL_ONE); 
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 
    glClearDepth(1.0); 
    glDepthFunc(GL_LESS); 
    glEnable(GL_DEPTH_TEST); 
    glShadeModel(GL_SMOOTH); 
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); 
    maxver=0; 
    objload("data/sphere.txt",&morph1); 
    objload("data/torus.txt",&morph2); 
    objload("data/Tube.txt",&morph3); 

    objallocate(&morph4,10300); 

    for(int i=0;i<10300;i++) 
    { 
     morph4.points[i].x=((float)(rand()%14000)/1000)-7; 
     morph4.points[i].y=((float)(rand()%14000)/1000)-7; 
     morph4.points[i].z=((float)(rand()%14000)/1000)-7; 
    } 

    objload("data/Tube.txt",&helper); 
    sour=dest=&morph1; 

    return TRUE; 
} 

void DrawGLScene(GLvoid) 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glLoadIdentity(); 
    glTranslatef(cx,cy,cz); 
    glRotatef(xrot,1,0,0); 
    glRotatef(yrot,0,1,0); 
    glRotatef(zrot,0,0,1); 

    xrot+=xspeed; yrot+=yspeed; zrot+=zspeed; 

    GLfloat tx,ty,tz; 
    VERTEX q; 
    glPointSize(2.0f); 

    //glBegin(GL_POINTS); 
    for(int i=0;i<morph3.verts;i++) 
    { 
     if(morph) 
      q=calculate(i); 
     else 
      q.x=q.y=q.z=0; 

     helper.points[i].x-=q.x; 
     helper.points[i].y-=q.y; 
     helper.points[i].z-=q.z; 
     tx=helper.points[i].x; 
     ty=helper.points[i].y; 
     tz=helper.points[i].z; 

     glColor3f(0,1,1); 
     glPushMatrix(); //i have modified this part onwards 
     gltranslaste(tx,ty,tz); 
     glutSolidSphere(2,6,6); 
     glPopMatrix(); 

     /*glVertex3f(tx,ty,tz); 
     glColor3f(0,0.5f,1); 
     tx-=2*q.x; ty-=2*q.y; ty-=2*q.y; 
     glVertex3f(tx,ty,tz); 
     glColor3f(0,0,1); 
     tx-=2*q.x; ty-=2*q.y; ty-=2*q.y; 
     glVertex3f(tx,ty,tz);*/ 
    } 
    //glEnd(); 

    if(morph && step<=steps) 
     step++; 
    else 
    { 
     morph=FALSE; sour=dest; step=0; 
    } 
} 
+0

あなたの質問を編集して、すべてのコードをさらに4スペース分インデントする必要があります。そのようにすれば、すべてが1つのブロックに正しく表示されます。 – Beska

+0

正規表現がゴールドに置換される場所( "; \ s \ s +") –

+0

Applaud @ LFSRは私がコミットしたいと思っている以上の仕事をしています! –

答えて

0

これはそのままtutorial codeのように見えます。それ以上の点では、球や円柱を描こうとするコードは見当たりません。何を試しましたか?どのように間違っていたのですか?

ポインタを探している場合は、ポイントを描画するコードを分離することから始めてください。パラメータにそのプロパティが与えられた点を描画する関数を記述してみてください。

(関数内でもglBegin() - glEnd()のペアを移動する必要があります)。glBegin()とglEnd()を最初の行と最後の行あなたが最終的にgluSphere()を呼び出す際にそれらを取り除く必要があるからです.GLBegin()とglEnd()の間で呼び出すことのできるGL関数はあまりありません。

編集質問の編集に応じて:

あなたのコードが動作します。 gltranslasteglTranslatefに置き換えると、明らかに、プレーンドットの代わりにシアンの図形を描くことができます。確かに、形は醜く見え、球のようには見えませんが、そこには存在していて、彼らは「変態」さえしています。どうしたの?

マテリアルとライティングのオプションを使用すると、より見栄えを良くすることができます。 (または、テクスチャをアライメントが分かるように割り当ててください)。回転させる場合は、[MV]マトリックスを押しながらポップする間にglRotate()を呼び出すことができます。

+0

aib、私はコードが含まれているので、私は間違っている場所を教えてください。 gl、glu、glui、glut、glauxのような種類の球が混乱しています。私は混乱しています。 – noob88

+0

@Ricketは以下のように、最初にポリゴンを使う方が良いと思います。しかし、私はglutSolidSphere()で何か間違っていることはありません。これは、コードの1行で球を描画します。 – aib

1

glBegin(GL_POINTS)をglBegin(GL_TRIANGLES)またはGL_QUADSまたはGL_POLYGONSに置き換えることをお勧めします。

glBegin/End hereのヘルプページを参照してください。

関連する問題