[C++ OPENGL] Dessiner un pauvre tube )=

Résolu/Fermé
Ghkaeitq Messages postés 12 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 10 novembre 2011 - 15 févr. 2010 à 20:14
Ghkaeitq Messages postés 12 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 10 novembre 2011 - 15 févr. 2010 à 22:20
Bonjour,

Je me lance dans la prog 3d et j'en chie un max. J'ai passé la journée à galérer et je ne comprend pas ou je bloque. Pas moyen d'afficher un pauvre tube. Pouvez vous me dire ce qui ne va pas ? Merci d'avance !

Le type point :


struct point
{
    float x;
    float y;
    float z;
}; 
void Dessiner();
void Tube(float x, float y, float z, float rb, float rh, float h, int n);


L'appel dans ma fonction "Dessiner()". Le quad de test s'affiche sans problème mais le tube me sort un vieux trait tout pourri :-(

   glBegin(GL_LINE_STRIP);

    glColor3ub(255,0,0); //face rouge
    glVertex3d(1.0,1.0,1.0);
    glVertex3d(1,1,-1);
    glVertex3d(-1,1,-1);
    glVertex3d(-1,1,1);    
    glEnd();
    glBegin(GL_LINE_STRIP);
    Tube(0,0,0,2,2,2,10);
    //Cornet(0,0,0,2,1,10);
    glEnd();


Et enfin ma fonction Tube. J'ai recalculé et je suis sur des valeurs mathématiques. Je me demande si j'ai pas un problème avec mes tableaux de points :

void Tube(float x, float y, float z, float rb, float rh, float h, int n)
{
     int i;
     point Pt[2*n];
     for(i=0;i<=n;i++)
     {
           Pt[i].x=x+cos(i/360*n)*rb;
           Pt[i].y=y;
           Pt[i].z=z+sin(i/360*n)*rb;  
     }
     for(i=n;i<=(2*n);i++)
     {
           Pt[i].x=x+cos(i/360*n)*rh;
           Pt[i].y=y+h;
           Pt[i].z=z+sin(i/360*n)*rh;  
     }
     for(i=1;i<n;i++)
     {
             glColor3ub(0,0,255);
             glVertex3d(Pt[i].x,Pt[i].y,Pt[i].z);
             glVertex3d(Pt[i+1].x,Pt[i+1].y,Pt[i+1].z);
             glVertex3d(Pt[i+n+1].x,Pt[i+n+1].y,Pt[i+n+1].z);
             glVertex3d(Pt[i+n].x,Pt[i+n].y,Pt[i+n].z);
     }
     
    glVertex3d(Pt[n].x,Pt[n].y,Pt[n].z);
    glVertex3d(Pt[1].x,Pt[1].y,Pt[1].z);
    glVertex3d(Pt[n+1].x,Pt[n+1].y,Pt[n+1].z);
    glVertex3d(Pt[2*n].x,Pt[2*n].y,Pt[2*n].z);
}


Quelqu'un peut m'aider ? Je sature là... J'ai passé la journée dessus. Merci d'avance.
            
                
A voir également:

1 réponse

Ghkaeitq Messages postés 12 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 10 novembre 2011 16
15 févr. 2010 à 22:20
Bon ben si un jour quelqu'un a le même problème...

Opération mathématique sans cast les entiers : Pas bien ! Tous les points étaient bien traités mais arrondis à l'entier le plus proche (donc tous à la même valeur dans mon cas).

En plus les valeurs de trigo étaient pas si bonnes que ça, faut multiplier par 2 Pi et non diviser T_T

Enfin bref. Résolu. Merci quand même
0