Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1312 connectés 

  FORUM HardWare.fr
  Programmation

  [Opengl glut et C++] Débuggeurs fous, HELP!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Opengl glut et C++] Débuggeurs fous, HELP!

n°24131
binome
Tu sais quoi? Oui, moi aussi.
Posté le 11-04-2001 à 22:19:33  profilanswer
 

qu'est-ce qui foire là-dedans?
 
C'est censé charger un modèle 3D à partir d'un fichier PLY structuré ainsi: d'abord on a le nombre de points, puis le nombre de facettes, puis les coordonnées de chaque point, puis (dernière partie du fichier) pour chaque facette, le nombre de pts qui la compose et l'indice de chacun d'eux.
exemple:
3
1
4.56 2.16 0.45
456.0 4.3 9.2
0.22 0.11 0.33
3 1 2 3
 
 
et voici le code (désolé pour la taille):
 
 
#include <fstream.h>
#include <iostream.h>
#include <GL/glut.h>
#include <stdlib.h>
 
   GLfloat * tete;
   GLuint * face;
   GLuint * ppface;
   int nbpts,nbface;
   GLint a=0,s=0,d=0,f=0,un=0,deux=0;
   GLfloat n=0,b=0,o=0;
 
double z=0;
int LightPos[4] = {0,0,3,1};
float MatSpec [4] = {1.f,1.f,1.f,1.f};
 
float MatDif[4] = {.8f,.8f,.5f,1.f};
float MatAmb[4] = {.8f,.8f,.5f,1.f};
float LightDif[4] = {.6f,1.f,1.f,1.f};
float LightSpec[4] = {.6f,1.f,1.f,1.f};
float LightAmb[4] = {.1f,.1f,.1f,1.f};
 
void tabcoord(char * fic,GLfloat *& tete, GLuint *& fct, GLuint *& ppf, int & nbp, int & nbf)
{
  ifstream i(fic);
  if (i)
  {
 int nbpts, nbface;     //variables contenant le nb de pts et de faces
 int toupts=0;      //variable contenant le nb total d'indices de pts pour les facettes
 int j=0,k=0;      //compteurs
 GLfloat * ptet;
    i>>nbpts>>nbface;
    nbp=nbpts;
    nbf=nbface;
    tete=new GLfloat [nbpts*3];   //tet contient toutes les coordonnées de chaque point
    float tmpf;       //variable temporaire utilisée pour remplir tet
 ptet=&(tete[0]);
    for (j;j<nbpts*3;j++,ptet++)  //remplissage de tet
    {
      i>>tmpf;
   cout<<"ayhi"<<endl;
      *ptet=tmpf;      /*PLANTAGE*/
   cout<<"ayho"<<endl;
    }
    unsigned int tmpui,crotte;   //variables temporaires tmpui pour remplir ppf et face crotte pour se déplacer dans le flot
 ppf=new GLuint [nbface];   //ppf contient le nombre de points constituant chaque facette
    for (j=0;j<nbface;j++)    //remplissage de ppf
    {
   i>>tmpui;
      ppf[j]=tmpui;
   toupts+=tmpui;
   for(k;k<tmpui;k++)    //on se place au prochain nombre de pts
   {
     i>>crotte;
   }
    }
 
    i.seekg(0);       //retour au début du flot
 for(j=0;j<=(2+nbpts*3);j++)   //on se place sur le 1er indice de point de la 1ere facette
 {
   i>>crotte;
 }
 
    fct=new GLuint [toupts];   //fct contient tous les indices de chaque facette
 GLuint * cont=&fct[0];    //variable servant à se positionner dans fct
 
 for(j=0;j<nbface;j++)    //remplissage de fct
 {
   for(k=0;k<ppf[j];k++,cont++)
   {
     i>>tmpui;
  *cont=tmpui;
   }
   i>>crotte;
 }
  }
  else cout<<"Erreur lors de l'ouverture du fichier";
}
 
void reshape (int w, int h)
{
 
 
glViewport (0, 0, (GLsizei) w, (GLsizei) h); // Le viewport remplit tout l'écran
  glMatrixMode (GL_PROJECTION);
  glLoadIdentity();
  gluPerspective (45.0, (GLfloat) w/ (GLfloat) h, 0.0001, 135.0);
  glMatrixMode (GL_MODELVIEW);
  glLoadIdentity();
  glTranslatef (0.0, 0.0, -15.0);/*
 
 
 
   glViewport (0, 0, (GLsizei) w, (GLsizei) h);
   glMatrixMode (GL_PROJECTION);
   glLoadIdentity();
   if (w <= h)
      glOrtho (-1.5, 1.5, -1.5*(GLfloat)h/(GLfloat)w,
         1.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0);
   
   else
      glOrtho (-1.5*(GLfloat)w/(GLfloat)h,
         1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0);
   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();*/
}
 
void display(void)
{
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  
  glMatrixMode(GL_MODELVIEW);  
  glLoadIdentity();  
  gluLookAt(0,6,6,0,0,0,0,1,0);
  glRotatef(f,1,0,0);
  glRotatef(un,0,1,0);
  glRotatef(deux,0,0,1);
  glTranslatef(n,o,b);
  glRotated(z,0,1,0);
  glTranslatef(0.0,0.0,6.0);
  glDisable(GL_LIGHTING);
  glBegin(GL_POINTS);
    glVertex3iv(LightPos);
  glEnd();
  glEnable(GL_LIGHTING);
  glTranslatef(0.0,0.0,-6.0);
  glLightiv(GL_LIGHT0,GL_POSITION,LightPos);  
  glRotated(-z,0,1,0);
  glPushMatrix();
    glTranslatef(0.0,-0.3,1.0);
    glRotatef(a,1,0,0);
    glRotatef(s,0,1,0);
    glRotatef(d,0,0,1);
    //glColor3f(1.0,0.0,0.0);
    glBegin(GL_POLYGON);
      int j;
      for(int i=0;i<nbface;i++)
   {
     //glColor3f((GLfloat)i/nbface,(GLfloat)i/nbface,(GLfloat)i/nbface);
     for(j=0;j<ppface[i];j++)
          glVertex3f(tete[face[j]*3],tete[face[j]*3+1],tete[face[j]*3+2]);
   }
    glEnd();
  glPopMatrix();
  //glutSolidSphere(1,50,50);
  z+=4;
  glutSwapBuffers();
  glutPostRedisplay();
}
 
void init(void)  
{
   glClearColor (0.0, 0.0, 0.0, 0.0);
   glShadeModel (GL_SMOOTH);
   glEnableClientState(GL_INDEX_ARRAY);
glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,MatSpec);
 glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,MatDif);
 glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT,MatAmb);
 glMateriali(GL_FRONT_AND_BACK,GL_SHININESS,50);
 glLightfv(GL_LIGHT0,GL_DIFFUSE,LightDif);
 glLightfv(GL_LIGHT0,GL_SPECULAR,LightSpec);
 glLightfv(GL_LIGHT0,GL_AMBIENT,LightAmb);
 
   
   glEnable(GL_DEPTH_TEST); // Active le test de profondeur  
  glEnable(GL_LIGHTING); // Active l'éclairage  
  glEnable(GL_LIGHT0);  
 
 
 glMatrixMode(GL_MODELVIEW);
 
 glPointSize(3);
 
}
 
void keyboard(unsigned char key, int x, int y)
{
   switch (key)  
  {
 //rotation du modele axe des X
    case 'a': a+=5;if (a>=360)a=0;glutPostRedisplay();break;
 case 'A': a-=5;if (a<=0)a=360;glutPostRedisplay();break;
 //rotation du modele axe des Y
 case 's': s+=5;if (s>=360)s=0;glutPostRedisplay();break;
 case 'S': s-=5;if (s<=0)s=360;glutPostRedisplay();break;
 //rotation du modele axe des Z
 case 'd': d+=5;if (d>=360)d=0;glutPostRedisplay();break;
 case 'D': d-=5;if (d<=0)d=360;glutPostRedisplay();break;
 //rotation de la vue axe des X
 case '4': f+=5;if (f>=360)f=0;glutPostRedisplay();break;
    case '1': f-=5;if (f<=0)f=360;glutPostRedisplay();break;
 //rotation de la vue axe des Y  
 case '5': un+=5;if (un>=360)un=0;glutPostRedisplay();break;
    case '2': un-=5;if (un<=0)un=360;glutPostRedisplay();break;
 //rotation de la vue axe des Z
 case '6': deux+=5;if (deux>=360)deux=0;glutPostRedisplay();break;
    case '3': deux-=5;if (deux<=0)deux=360;glutPostRedisplay();break;
    //translation de la vue axe des X
 case 'v': n-=0.1;glutPostRedisplay();break;
 case 'n': n+=0.1;glutPostRedisplay();break;
 //translation de la vue axe des Y
 case 'k': b+=0.1;glutPostRedisplay();break;
 case 'i': b-=0.1;glutPostRedisplay();break;
 //translation de la vue axe des Z
 case 'h': o+=0.1;glutPostRedisplay();break;
 case 'b': o-=0.1;glutPostRedisplay();break;
    //affichage des valeurs des variables
 case 'l': cout<<"a:"<<a<<"\ns:"<<s<<"\nd:"<<d<<"\nf:"<<f<<"\nun:"<<un<<"\ndeux:"<<deux<<"\nn:"<<n<<"\nb:"<<b<<"\no:"<<o<<endl;break;
 //exit
    case 'x': exit(0);break;
 //reset
 case 'r': a=s=d=n=b=o=f=un=deux=0;glutPostRedisplay();break;
  }
 
     
}
 
int main(int argc, char** argv)
{
   glutInit(&argc, argv);
   glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
   glutInitWindowSize (500, 500);  
   glutInitWindowPosition (100, 100);
   glutCreateWindow (argv[0]);
   init ();
   tabcoord("Generic.ply",tete,face,ppface,nbpts,nbface);
   glutDisplayFunc(display);
   glutReshapeFunc(reshape);
   glutKeyboardFunc(keyboard);
   glutMainLoop();
   delete tete;
   delete face;
   return 0;
}
 
 
 
 
Ca plante là où j'ai mis que ça plantait.
 
Merci de votre aide!


---------------
La néantiseation de l'en-soi est une ontologie post-husserlienne
mood
Publicité
Posté le 11-04-2001 à 22:19:33  profilanswer
 

n°24137
z51
Posté le 11-04-2001 à 23:02:21  profilanswer
 

je suis pas du tout sûr de moi, mais est-ce que t'es certain que :
i>>nbpts>>nbface
c'est la même chose que :
i>>nbpts;  
i>>nbface;
 
??

n°24148
gilou
Modérateur
Modzilla
Posté le 12-04-2001 à 06:37:06  profilanswer
 

i>>nbpts>>nbface est equivalent a:
nbpts>>nbface;
i>>nbface;  
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°24332
binome
Tu sais quoi? Oui, moi aussi.
Posté le 12-04-2001 à 16:27:05  profilanswer
 

Il faut que je vous dise que ce code je l'ai repris d'une version qui marchait bien mais qui ne gérait pas le nombre de pts par facette (considéré à 3). Là où il y a le pb, sur l'autre version, ça passe très bien.
 
Mais tout cela ne règle pas mon pb!
Allez, je suis sûr qu'il y en a qui sont trop forts en coredump!


---------------
La néantiseation de l'en-soi est une ontologie post-husserlienne
n°24765
binome
Tu sais quoi? Oui, moi aussi.
Posté le 13-04-2001 à 19:47:14  profilanswer
 

Allô?


---------------
La néantiseation de l'en-soi est une ontologie post-husserlienne
n°24895
binome
Tu sais quoi? Oui, moi aussi.
Posté le 15-04-2001 à 19:26:35  profilanswer
 

:D

n°25266
binome
Tu sais quoi? Oui, moi aussi.
Posté le 17-04-2001 à 16:23:26  profilanswer
 

Allez, du courage les mecs! (et les filles aussi, y pas de raison)

n°25279
seblamb
Posté le 17-04-2001 à 16:34:17  profilanswer
 

Ca plante au bout de combien d'itération de la bouble "for" ? Sinon tu as verfié que new GLFloat ne renvois pas un pointeur NULL ?


---------------
[:seblamb] Moi aussi je veux grater dédé!!!
n°25283
binome
Tu sais quoi? Oui, moi aussi.
Posté le 17-04-2001 à 16:37:26  profilanswer
 

Dès la première itération.
en fait, on ne peut même pas accéder au tableau.
J'ai fait EXACTEMENT la même chose dans un autre programme, même nom de tableau (bon, je sais, on s'en fout), même déclaration... tout pareil, et là ça à marché.
A comprend pô.


---------------
La néantiseation de l'en-soi est une ontologie post-husserlienne
n°25287
seblamb
Posté le 17-04-2001 à 16:40:15  profilanswer
 

regarde ce que te renvois GLfloat et aussi la valeur de "nbpts" parce que si "nbpts" est à zero tu vas pas allé bien loin   :D


---------------
[:seblamb] Moi aussi je veux grater dédé!!!
mood
Publicité
Posté le 17-04-2001 à 16:40:15  profilanswer
 

n°25292
verdoux
And I'm still waiting
Posté le 17-04-2001 à 16:47:13  profilanswer
 

C'est quoi le message d'erreur retourné ?

n°25294
binome
Tu sais quoi? Oui, moi aussi.
Posté le 17-04-2001 à 16:48:47  profilanswer
 

J'ai vérifié le fichier Generic.ply dans lequel je charge tout.
taille : 0k.
taille normale : 73k.
Merci W2k pour ton copier-coller du tonnerre.
J'ai honte.
Pardon.
Adieu.
Je vais me petit-suicider.
 
Splotch.

 

[edit]--Message édité par binome--[/edit]


---------------
La néantiseation de l'en-soi est une ontologie post-husserlienne
n°25296
verdoux
And I'm still waiting
Posté le 17-04-2001 à 16:50:18  profilanswer
 

:lol:

n°25299
binome
Tu sais quoi? Oui, moi aussi.
Posté le 17-04-2001 à 16:52:38  profilanswer
 

En tout cas merci tout le monde pour le temps que vous avez perdu là-dessus.
Si vous ne l'aviez pas tout à fait saisi, avec ce programme, vous devriez pouvoir charger et afficher n'importe quel modèle 3D en OpenGL, pour peu qu'il ait la structure expliquée dans le premier message. Si ça vous intéresse ou que ça puisse vous servir, il est à vous.
Mais, je l'ai exécuté, et il a pas l'air d'être très au point encore.
 
Merci en tous cas.


---------------
La néantiseation de l'en-soi est une ontologie post-husserlienne

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [Opengl glut et C++] Débuggeurs fous, HELP!

 

Sujets relatifs
[VB] Help desk officiel[SQL] HELP sur une requête SQL
Un truc en HTML, c facile non ? but HELP !!!!!!!!JSP help
helpWin32 et OpenGL en C/C++
[ASP/VB/ActiveX] Help je comprends rien du tout à cette merde !VB : HELP SUR LES BOUCLES
help: javance pôDreamweaver 4 ----> help svp
Plus de sujets relatifs à : [Opengl glut et C++] Débuggeurs fous, HELP!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR