2009-03-24 15 views
2

ci-dessous sont une longueur entière de code que j'ai copié de NEHE Production (leçon 25) .. J'essayais juste de jouer autour, mais semblent ne pas pouvoir changer/convertir chaque points en un sphères individuelles ou cylindre ..
en quelque sorte quand j'ai fait mon ajustement, ils ne sont pas disposés de la façon dont ils sont supposés et ils ne tourneront pas ..
J'ai prévu d'ajouter de la lumière dans ce tutoriel plus tard aussi ..Besoin d'aide avec la conversion de points en formes

grâce à l'avance pour toute aide =]

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

Vous devriez éditer votre question et indenter tout votre code par 4 espaces supplémentaires ... de cette façon l'ensemble apparaîtra correctement dans un bloc. – Beska

+0

Un endroit où regex est or remplacer ("; \ s \ s +") –

+0

Applaudissez @LFSR plus de travail que je ne voulais commettre! –

Répondre

0

Cela ressemble à tutorial code, intact. Ou plus exactement, je ne vois pas de code essayant de dessiner des sphères ou des cylindres. Qu'avez-vous essayé? Comment ça s'est mal passé?

Si vous cherchez des pointeurs, je vous suggère de commencer par isoler le code qui dessine les points. Essayez d'écrire une fonction qui dessine un point donné ses propriétés dans les paramètres.

(Notez que vous devez également déplacer la paire glBegin() - glEnd() à l'intérieur de la fonction Appelez glBegin() avant et glEnd() après avoir dessiné chaque point, c'est-à-dire les première et dernière lignes C'est parce que vous devrez vous en débarrasser quand vous finirez par appeler gluSphere() depuis l'intérieur. Il n'y a pas beaucoup de fonctions GL que vous pouvez appeler entre une paire glBegin() - glEnd().)

Modifier en réponse à l'édition de la question:

Votre code fonctionne. Remplacement gltranslaste avec glTranslatef, évidemment, il est capable de dessiner des formes cyan au lieu de simples points. Certes, les formes ont l'air moche et n'ont rien à voir avec les sphères, mais elles sont là et elles «se métamorphosent». Quel est le problème?

Vous voudrez peut-être jouer avec les options matérielles et d'éclairage pour les rendre plus belles. (Ou juste assigner une texture afin que vous puissiez voir leur alignement.) Comme pour les faire pivoter, vous devriez être en mesure d'appeler glRotate() entre pousser et ouvrir la matrice [MV].

+0

aib, j'ai inclus le code maintenant s'il vous plaît, laissez-moi savoir où je vais mal. il y a tellement de types de sphères de gl, glu, glui, glut et confus dont on serait le plus facile à utiliser. – noob88

+0

Je pense que tu ferais mieux d'utiliser d'abord les polygones, comme @Ricket l'a suggéré plus bas. Mais je ne vois rien de mal avec glutSolidSphere(), qui dessine une sphère avec une seule ligne de code. – aib

1

Un bon point de départ est de remplacer glBegin (GL_POINTS) par glBegin (GL_TRIANGLES) ou GL_QUADS ou GL_POLYGONS. Voir la page d'aide sur glBegin/End here.