Bonsoir tout le monde ,

Je suis nouveau et j'ai déjà une questin à vous poser si vous le voulez bien
J'ai un gros problème: en effet je souhaite faire un simple petit loader de fichiers .obj mais le problème est que mon programme ne veut pas se lancer...

Tout d'abord voici mes différentes fonctions:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
 char character[100];
 
int linereadvertex;
int linereadtexcoord;
int linereadordervertex;
int linereadordertexcoord;
 
int lineobjvertex;
int lineobjtexcoord;
int lineobjordervertex;
int lineobjordertexcoord;
 
typedef struct Vertexs {
     GLfloat x;
	 GLfloat y;
	 GLfloat z;
}
Vertexs;
 
typedef struct orderVertexs {
     int v1;
	 int v2;
	 int v3;
	 int v4;
}
orderVertexs;
 
typedef struct Texcoords {
     float x;
	 float y;
}
Texcoords;
 
typedef struct orderTexcoords {
     int t1;
	 int t2;
	 int t3;
	 int t4;
}
orderTexcoords;
 
typedef struct ModelObj {
     Vertexs*vertex;
	 orderVertexs*ordervertex;
	 Texcoords*texcoord;
	 orderTexcoords*ordertexcoord;
}
ModelObj;
ModelObj modelobj;
 
void readvertexobj(char*filename) {//on calcule le nombre de vertex... contenu dans le fichier .obj
	 FILE*obj = NULL;
	 obj = fopen(filename, "r");
	 linereadvertex = 0;
	 linereadtexcoord = 0;
	 linereadordervertex = 0;
	 linereadordertexcoord = 0;
	 while(fgets(character, sizeof(character), obj) != NULL) {
	     if(character[0] == 'v' && character[1] != 't') {
		     linereadvertex++;
		 }
		 else if(character[0] == 'v' && character[1] == 't') {
		     linereadtexcoord++;
		 }
		 else if(character[0] == 'f') {
		     linereadordervertex++;
			 linereadordertexcoord++;
		 }
	 }
	 fclose(obj);
}
 
void loadobj(char*filename, int modeloadobj) {
        readvertexobj("./data/cube.obj");
	 FILE*obj = NULL;
 
	 lineobjvertex = 1;
	 lineobjtexcoord = 1;
	 lineobjordervertex = 1;
	 lineobjordertexcoord = 1;
	 linereadordertexcoord = 1;
 
	 obj = fopen(filename, "r");
 
	 modelobj.vertex = (Vertexs*)malloc(sizeof(Vertexs)*linereadvertex);//on alloue assez de mémoire afin de contenir tous les vertex du fichier
	 modelobj.texcoord = (Texcoords*)malloc(sizeof(Texcoords)*linereadtexcoord);
	 modelobj.ordervertex = (orderVertexs*)malloc(sizeof(orderVertexs)*linereadordervertex);
	 modelobj.ordertexcoord = (orderTexcoords*)malloc(sizeof(orderTexcoords)*linereadordertexcoord);
 
	 if(modelobj.vertex == NULL) exit(0);
	 if(modelobj.texcoord == NULL) exit(0);
	 if(modelobj.ordervertex == NULL) exit(0);
	 if(modelobj.ordertexcoord == NULL) exit(0);
 
	 if(obj > 0) {
	     while(fgets(character, 100, obj) != NULL) {
		     if(modeloadobj == 0) {//mode du fichier .obj "normal" à charger c'est-à-dire dépourvu de coordonnées de texture 
	             if(character[0] == 'v') {
		             sscanf(character+2, "%f %f %f", &modelobj.vertex[lineobjvertex].x, &modelobj.vertex[lineobjvertex].y, &modelobj.vertex[lineobjvertex].z);//on stocke les différents valeur en x, y et z du vertex
			         lineobjvertex++;
		         }
		         else if(character[0] == 'f') {
		             sscanf(character+2, "%d %d %d %d", &modelobj.ordervertex[lineobjordervertex].v1, &modelobj.ordervertex[lineobjordervertex].v2, &modelobj.ordervertex[lineobjordervertex].v3, &modelobj.ordervertex[lineobjordervertex].v4);
			         lineobjordervertex++;
			         lineobjordertexcoord++;
		         }
			 }
		     else if(modeloadobj == 1) {//mode du fichier .obj "pluspoussé" à charger c'est-à-dire avec les coordonnées de texture 
	             if((character[0] == 'v') && (character[1] != 't')) {
		             sscanf(character+2, "%f %f %f", &modelobj.vertex[lineobjvertex].x, &modelobj.vertex[lineobjvertex].y, &modelobj.vertex[lineobjvertex].z);
			         lineobjvertex++;
		         }
			     else if((character[0] == 'v') && (character[1] == 't')) {
			         sscanf(character+3, "%f %f", &modelobj.texcoord[lineobjtexcoord].x, &modelobj.texcoord[lineobjtexcoord].y);
				     lineobjtexcoord++;
			     }
		         else if(character[0] == 'f') {
		             sscanf(character+2, "%d/%d %d/%d %d/%d %d/%d", &modelobj.ordervertex[lineobjordervertex].v1, &modelobj.ordertexcoord[lineobjordertexcoord].t1, &modelobj.ordervertex[lineobjordervertex].v2, &modelobj.ordertexcoord[lineobjordertexcoord].t2, &modelobj.ordervertex[lineobjordervertex].v3, &modelobj.ordertexcoord[lineobjordertexcoord].t3, &modelobj.ordervertex[lineobjordervertex].v4, &modelobj.ordertexcoord[lineobjordertexcoord].t4);
			         lineobjordervertex++;
		         }
			 }
	     }
	 }
	 else exit(0);
 
	 fclose(obj);
}
Voici le début de ma fonction principale avec l'affichage de l'objet à partir du fichier .obj :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
 
int main(int argc, char **argv) 
{  
  glutInit(&argc, argv);  
  glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH);  
  glutInitWindowSize(480, 272); // @@@
 
  int window = glutCreateWindow("pspflashsystem");
  glutInitWindowPosition(0, 0); 
 
 
  GLfloat angle = 0.0f;
 
  GLfloat vitesse = 0.0f;
 
 
  glGenTextures(5, texture);//on vrée 5 textures en prenant leur id
  loadJpegImage("data/cube2.jpg", texture[0]);  
  loadJpegImage("data/cube.jpg", texture[1]);
 
  int i;
  int j;
  int k;
 
  loadobj("./data/cube.obj", 0);
  float anglepi = 0.0f;
 
  FILE*debug = NULL;
  debug = fopen("./data/debug.txt", "w");
 
  while(1) {	 
 
	 glEnable(GL_TEXTURE_2D);
	 glEnable(GL_DEPTH_TEST);//pour autoriser le Z-Buffer
	 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//on nettoie l'écran et le Z-Buffer (==depth buffer)
 
	 glMatrixMode(GL_PROJECTION);
	 glLoadIdentity();
	 gluPerspective(55, 480/272, 0.1, 1000);
	 glMatrixMode(GL_MODELVIEW);
	 glLoadIdentity();
	 gluLookAt(0.0f, 25.0f, 30.0f, 0.0f, 10.0f, 0.0f, 0.0f, 1.0f, 0.0f); 
 
	 anglepi+=0.75f; 
//affichage de l'objet
	 for(i=0; i<lineobjordervertex; i++) {
	     glPushMatrix();
		 glTranslatef(0.0f, 15.0f, 19.0f);
		 glRotatef(anglepi, 1.0f, 1.0f, 1.0f);
		 //glBindTexture(GL_TEXTURE_2D, texture[0]);
		 glColor3ub(255, 255, 255);
		 glBegin(GL_QUADS);
		 glVertex3f(modelobj.vertex[modelobj.ordervertex[i].v1].x, modelobj.vertex[modelobj.ordervertex[i].v1].y, modelobj.vertex[modelobj.ordervertex[i].v1].z);
		 glVertex3f(modelobj.vertex[modelobj.ordervertex[i].v2].x, modelobj.vertex[modelobj.ordervertex[i].v2].y, modelobj.vertex[modelobj.ordervertex[i].v2].z);
		  glVertex3f(modelobj.vertex[modelobj.ordervertex[i].v3].x, modelobj.vertex[modelobj.ordervertex[i].v3].y, modelobj.vertex[modelobj.ordervertex[i].v3].z);
		 glVertex3f(modelobj.vertex[modelobj.ordervertex[i].v4].x, modelobj.vertex[modelobj.ordervertex[i].v4].y, modelobj.vertex[modelobj.ordervertex[i].v4].z); 
		 glEnd();
		 glPopMatrix();
	 }
Sinon j'ai constaté que san la boucle for en affichant un à un les vertex (donc plus long) l'objet apparait et le programme fonctionne sans problème donc je pense que cela doit venir de la boucle mais je ne sais pas comment le résoudre si vous pouviez m'aider (ça fait tout une demi-journée que j'essaye de le résoudre non stop et je ne trouve pas la solution )

Merci encore en vous souhaitant une bonne nuit bien sûr