2009-03-24 11 views
2

unten sind eine ganze Länge von Code, den ich von NEHE Production kopiert habe (Lektion 25) .. Ich wollte nur herumspielen, aber scheinen nicht in der Lage zu ändern/konvertieren Sie jede Punkte in eine einzelne Kugeln noch Zylinder ..
irgendwie, als ich meine Einstellung tat sie sind nicht in der Art und Weise, wie sie angenommen werden sollen und sie werden nicht drehen ..
Ich plante, Licht in diesem Tutorial später als auch ..Benötigen Sie Hilfe beim Umwandeln von Punkten in Formen

Vielen dank im Voraus für jede Hilfe =]

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

Sie sollten Ihre Frage bearbeiten und den gesamten Code um weitere 4 Leerzeichen einrücken ... so wird das Ganze in einem Block korrekt angezeigt. – Beska

+0

Ein Ort, wo Regex Gold ist ersetzen ("; \ s \ s +") –

+0

applaud @ LFSR mehr Arbeit, als ich bereit war zu begehen! –

Antwort

0

Dies sieht aus wie die , intakt. Oder mehr auf den Punkt, ich sehe keinen Code, der versucht, Kugeln oder Zylinder zu zeichnen. Was hast du versucht? Wie ist es schiefgelaufen?

Wenn Sie nach Zeigern suchen, schlage ich vor, Sie beginnen mit der Isolierung des Codes, der die Punkte zeichnet. Versuchen Sie eine Funktion zu schreiben, die in den Parametern einen Punkt aufgrund ihrer Eigenschaften zeichnet.

(Beachten Sie, dass Sie das glBegin() - glEnd() - Paar auch innerhalb der Funktion verschieben sollten.) Rufen Sie glBegin() vor und glEnd() nach dem Zeichnen jedes einzelnen Punktes auf, dh als erste und letzte Zeile Das liegt daran, dass Sie sie loswerden müssen, wenn Sie schließlich gluSphere() von innen aufrufen. Es gibt nicht viele GL-Funktionen, die Sie zwischen einem glBegin() - glEnd() -Paar aufrufen können.)

Edit als Antwort auf die Bearbeitung der Frage:

Ihr Code funktioniert. Er ersetzt gltranslaste durch glTranslatef, offensichtlich ist es in der Lage, Cyan-Formen anstelle von einfachen Punkten zu zeichnen. Zugegeben, die Formen sehen hässlich und nichts wie Kugeln aus, aber sie sind da und sie "morphen" sogar. Was ist das Problem?

Sie können mit den Material- und Beleuchtungsoptionen spielen, um sie besser aussehen zu lassen. (Oder weisen Sie einfach eine Textur zu, damit Sie ihre Ausrichtung sehen können.) Um sie zu drehen, sollten Sie in der Lage sein, glRotate() aufzurufen, indem Sie die [MV] -Matrix drücken und loslassen.

+0

aib, ich habe den Code jetzt bitte, lass mich wissen, wo ich falsch liege. es gibt so viele Arten Kugeln aus gl, glu, glui, glut und glaux ich verwirrt von denen man wäre am einfachsten zu bedienen .. – noob88

+0

Ich denke, Sie sind besser dran mit Polygonen zuerst, wie @Ricket unten vorgeschlagen hat. Aber ich sehe nichts falsches mit glutSolidSphere(), das eine Kugel mit einer einzelnen Codezeile zeichnet. – aib

1

Ein guter Ausgangspunkt ist, glBegin (GL_POINTS) durch glBegin (GL_TRIANGLES) oder GL_QUADS oder GL_POLYGONS zu ersetzen.

Siehe die Hilfeseite zu glBegin/Ende here.

Verwandte Themen