[opengl]probleme : mon prog qui li dans un .ase n'affiche rien !

probleme : mon prog qui li dans un .ase n'affiche rien ! [opengl] - C++ - Programmation

Marsh Posté le 27-04-2003 à 20:59:39    

ce prog objet était à l'origine en procédural (en C)donc je l'ai adapté et là j'ai comme résultat une fenetre noire.
Il n'y a aucune erreurs a la compilation et je n'ai pas touché a la fonction "lire_un_ase", donc l'erreur doit venir d'ailleur... mais je ne vois pas où  :(  
pouvez vous m'aider ?(ne faites pas attention a la longueur, une grande partie est dû a la fonction "lire_un_ase" qui est correcte).
voici le code:
 

Code :
  1. #include <stdio.h>
  2. #include <iostream.h>
  3. #include <string.h>
  4. #include <conio.h>
  5. #include <stdlib.h>
  6. #include <GL/glut.h>
  7. #define nb_vertices 20000
  8. #define nb_faces 20000
  9. struct donnees
  10. {
  11.  float tab_vertices [nb_vertices][3] ;
  12.  int tab_sommets [nb_faces][3] ;
  13. };
  14. class lire_un_ase
  15. {
  16. public :
  17.  donnees tab_struct[50] ;
  18.  int nb_indices[100] ;
  19.  int i ;
  20.  int j ;
  21.  int m ;
  22.  int b ;
  23.  int a ;
  24.  char tmp [100] ;
  25.   char tmp2 [100] ;
  26.  char tmp3 [100] ;
  27.   int temp ;
  28.   char passe_ligne [200] ;
  29.     lire_un_ase () ;
  30. };
  31. lire_un_ase *lecteur ;
  32.     lire_un_ase::lire_un_ase ()
  33.     {
  34.  char nom_fichier[] = "geosphere.ASE" ;
  35.  FILE *pointeur ;    //pointeur sur le fichier  
  36.  if ((pointeur = fopen(nom_fichier, "r" )) == NULL)
  37.           return ;
  38. do  //compte le nombre d'objets
  39.  {
  40.   fscanf(pointeur, "%s", tmp) ;
  41.  if(strcmp ("*MESH", tmp) == 0)
  42.  {
  43.   a++ ;
  44.  }
  45.  }
  46.  while (!feof(pointeur)) ;
  47. fseek (pointeur, 0,SEEK_SET) ;
  48.     //cout<< a ;
  49.  for (b=0; b<a ;b++)
  50. {
  51.  do
  52.   {
  53.    fscanf(pointeur, "%s", tmp) ;
  54.   }
  55.   while (strcmp ("*MESH_VERTEX", tmp) != 0) ; //passe toutes les chaines en revue jusqu'a qu'a ce que tmp soit égal à chaine ("*MESH_VERTEX" )
  56.   do//rempli le tableau de structure avec des coordonnées de vertices
  57.   {
  58.    fscanf (pointeur, "%d%f%f%f%s", &(temp) ,&(tab_struct[b].tab_vertices[i][0]),
  59.    &(tab_struct[b].tab_vertices[i][1]),&(tab_struct[b].tab_vertices[i][2]), tmp) ;
  60.    //cout << tab_struct[b].tab_vertices[i][0]<<" "<<tab_struct[b].tab_vertices[i][1]<<" "<< tab_struct[b].tab_vertices[i][2]<<endl ;
  61.   i++ ;
  62.   }
  63.         while (strcmp (tmp, "}" )!=0) ;
  64.  i=0 ;
  65.   do
  66.   {
  67.   fscanf(pointeur, "%s", tmp2) ;
  68.   }
  69.   while (strcmp ("A:", tmp2) != 0) ;
  70.  do //rempli le tableau de la structure avec le numero des sommets
  71.  {
  72.   fscanf (pointeur, "%d%s%d%s%d", &(tab_struct[b].tab_sommets[j][0]),tmp,
  73.     &(tab_struct[b].tab_sommets[j][1]),tmp, &(tab_struct[b].tab_sommets[j][2])) ;
  74.   //cout << tab_struct[b].tab_sommets[j][0]<<" "<<tab_struct[b].tab_sommets[j][1]<<" "<<tab_struct[b].tab_sommets[j][2]<< endl ;
  75.   fgets (passe_ligne, 200, pointeur) ; //saute une ligne dans le fichier où les données ne servent pas
  76.   fscanf (pointeur, "%s%s%s", tmp3, tmp, tmp);
  77.   j++ ;
  78.  }
  79.  while (strcmp(tmp3, "}" )!=0) ;
  80.  nb_indices[b] = j*3;//calcul le nombre d'indices
  81.  //cout << nb_indices[b]<<endl ;
  82.  j=0;
  83.     }
  84.     //cout<< "hello1"<<endl ;
  85.      fclose (pointeur) ;
  86.     }
  87. void reshape (int w, int h)
  88. {
  89. glViewport (0, 0, w, h) ;
  90. glMatrixMode (GL_PROJECTION) ;
  91. glLoadIdentity () ;
  92. glFrustum(-15.0 , 15.0, -15.0, 15.0, 5.0, 500.0); //perspective conique
  93. glMatrixMode(GL_MODELVIEW); //la matrice active de modelisation/visualisation sera affectée
  94. glLoadIdentity(); //charge la matrice identité
  95. gluLookAt (20.0, 0.0, 0.0, 0.0,0.0,0.0, 0.0, 1.0, 0.0) ; //caméra placée sur l'axe des Z et regardant vers l'origine
  96. //pour "voiture" gluLookAt (0.0, 0.0, -50.0, 0.0,0.0,0.0, 0.0, 1.0, 0.0) ;
  97. //pour "geosphere" gluLookAt (20.0, 0.0, 0.0, 0.0,0.0,0.0, 0.0, 1.0, 0.0) ;
  98. }
  99. void display ()
  100. {
  101. glEnableClientState (GL_VERTEX_ARRAY);
  102. glPolygonMode (GL_FRONT_AND_BACK, GL_LINE) ;
  103. glClear (GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT ) ;
  104. //glScalef (3.0, 3.0, 3.0) ;
  105. for (lecteur->m=0 ; (lecteur->m)<=(lecteur->a) ; lecteur->m++)
  106. {
  107.  glVertexPointer (3, GL_FLOAT, 0, &(lecteur->tab_struct[lecteur->m].tab_vertices[0][0]));
  108.  glDrawElements (GL_TRIANGLES, lecteur->nb_indices[lecteur->m],
  109.   GL_UNSIGNED_INT,&(lecteur->tab_struct[lecteur->m].tab_sommets[0][0])) ;
  110. }
  111. glutSwapBuffers() ;
  112. }
  113. void main (int argc, char** argv)
  114. {
  115.  lecteur = new lire_un_ase ;
  116.  //cout<<"hello"<<endl ;
  117.  glutInit (&argc, argv) ;
  118.  glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH) ;
  119.  glutInitWindowSize (640, 480) ;
  120.  glutInitWindowPosition (250,250) ;
  121.  glutCreateWindow (argv [0]) ;
  122.  glEnable( GL_DEPTH_TEST );
  123.  glutReshapeFunc (reshape) ;
  124.  glutDisplayFunc (display) ;
  125.  glutMainLoop () ;
  126. }


Message édité par airseb le 28-04-2003 à 18:42:30
Reply

Marsh Posté le 27-04-2003 à 20:59:39   

Reply

Marsh Posté le 28-04-2003 à 18:42:39    

:bounce:

Reply

Marsh Posté le 28-04-2003 à 19:38:06    

please help !  :(

Reply

Marsh Posté le 29-04-2003 à 15:56:03    

a tt les coup c un pb de camera.
A chaque fois que je cree un prog OpenGL,
g des prob de camera.
 
a chaque fois que tu redessine fo replacer la camera !!!
sinon il la place en 0,0,0
 
donc met ton gluLookAt ds la fct display.
sinon moi g eu un pb avec une mauvaise trnsfo de projection  
va voir les didacticielle de linuxgraphics
 
http://www.linuxgraphic.org/sectio [...] idact.html


Message édité par bilgetz_42 le 29-04-2003 à 16:14:05
Reply

Marsh Posté le 29-04-2003 à 18:21:17    

ouais mais le hic c que quand je met les même coordonnées de frustum et de gluLookAt dans le même programme en procédural, ça marche !
Donc je pense que c mon implémentation en objet qui foire, mais trouve pas où !  :(

Reply

Marsh Posté le 06-05-2003 à 15:46:56    

tt tes variables sont bien initialiser ???
car je vois pas la declaration du constructeur.
et je vois que tu utilise 'a' ss l'avoir initialiser avant.
 

Code :
  1. do  //compte le nombre d'objets
  2. {
  3.   fscanf(pointeur, "%s", tmp) ;
  4. if(strcmp ("*MESH", tmp) == 0)
  5. {
  6.   a++ ;
  7. }
  8. }

 
 

Reply

Marsh Posté le 06-05-2003 à 21:09:01    

bilgetz_42 a écrit :

tt tes variables sont bien initialiser ???
car je vois pas la declaration du constructeur.
et je vois que tu utilise 'a' ss l'avoir initialiser avant.
 

Code :
  1. do  //compte le nombre d'objets
  2. {
  3.   fscanf(pointeur, "%s", tmp) ;
  4. if(strcmp ("*MESH", tmp) == 0)
  5. {
  6.   a++ ;
  7. }
  8. }

 
 
 


 
oui merci c ça ! (g initialisé toutes les variables) :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed