bonjour,
j ai besoin de lire des donnee se trouvant dans un fichier .obj se presentnt de cette maniere :
en faisant :# XSI Wavefront OBJ Export v3.0
# File Created: Wed Nov 7 10:49:04 2007
# XSI Version: 6.02.2007.0613
o 6.02.2007.0613
mtllib aircraft.mtl
# Hierarchy (from self to top father)
g cylinder
#begin 62 vertices
v 0.000000 0.000000 -3.931000
v 0.000000 -0.000000 3.931000
v -0.241153 0.000000 -3.931000
v -0.482306 0.000000 -3.931000
v -0.482306 -0.000000 3.931000
v -0.241153 -0.000000 3.931000
v -0.170521 -0.170521 -3.931000
v -0.341042 -0.341042 -3.931000 etc...
#begin 265 normals
n 535 153 153
etc...
#begin 158 Faces
f 1 2 3
etc...
je peu afficher le point mtl : "aircraft.mtl"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 objfile = fopen("monFichier.obj", "r"); if (objfile == NULL) { printf("error opening .OBJ file\n"); exit(EXIT_FAILURE); } /* read material (.mtl ) */ char FileMTL[12]; fseek(objfile, 127 * sizeof(char), SEEK_SET); fscanf(objfile,"%s ", FileMTL); printf(" materials file : %s \n", FileMTL);
mai ensuite je n'arrive pas a reprendre la lecture de mon fichier sans "erreurs de segmentation"
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 while ( fgetc(objfile)!=EOF ){ nbVertices=0; nbNormals=0; nbFaces=0; fscanf(objfile,"#begin %d vertices", &nbVertices); fscanf(objfile,"#begin %d normals", &nbNormals); fscanf(objfile,"#begin %d faces", &nbFaces); if(nbVertices !=0){ printf(" nb vertices : %d \n", nbVertices); *vertices = malloc(nbVertices * sizeof(*vertices)); /* read vertices*/ for (row = 0; row < nbVertices; row++){ fscanf(objfile,"v %f %f %f", &vertices[row][0], &vertices[row][1], &vertices[row][2]); } /*print out vertices to check */ for (row = 0; row < nbVertices; row++){ for (col = 0; col < 3; col++){ printf("%f\t", vertices[row][col]); } printf("\n"); } } else if(nbNormals !=0){ printf(" nb normals : %d \n", nbNormals); *normals = malloc(nbNormals * sizeof(*normals)); /*read NormalsLists */ for (row = 0; row < nbNormals; row++){ fscanf(objfile, "vn %f %f %f", &normals[row][0], &normals[row][1], &normals[row][2]); } /*print out normalslist to check */ for (row = 0; row < nbNormals; row++){ for (col = 0; col < 2; col++){ printf("%f\t", normals[row][col]); } printf("\n"); } } else if(nbFaces !=0){ *facelist = malloc(nbFaces * sizeof(*facelist)); *material = malloc(nbFaces * sizeof(*material)); /* read facelist*/ /* f vector1//normal1 vector2//normal2 vector3//normal3*/ for (row = 0; row < nbFaces; row++){ fscanf(objfile,"usemtl %s", &material[row]); fscanf(objfile,"f %d//%d %d//%d %d//%d", &facelist[row][0], &facelist[row][3], &facelist[row][1], &facelist[row][4], &facelist[row][2], &facelist[row][5]); // facelists[no of face][data for face] // data are : [vert1 | vert2 | vert3 | norm1 | norm2 | norm3] } /*print out facelist to check */ for (row = 0; row < 6; row++){ for (col = 0; col < 4; col++) printf("%d\t", facelist[row][col]); printf("\n"); } }
ce dernier bout de code et sense lire les vertices /normals /Faces et les stockes dans des tableaux correspondants ...
je pense que mon test de fin de fichier est mauvais (si je met while(1) la boucle infinie tourne indefiniement sans erreur de segmentation...)
pouvez vous m'aider a comprendre ?
avant d essayer de tester la fin du fichier j ai essayer de reprendre la lecture de mes donnee grace a :
sans succes :: erreur de segmentation a l execution
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 fseek(objfile, 187 * sizeof(char), SEEK_SET); // 187 est la position du prochain int que je veu lire dans le fichier fscanf(objfile,"#begin %d vertices", &nbVertices);![]()
Partager