Bonjour,
Si quelqu'un pouvait m'aider ça serait sympa?
Avec ce loader de modèle 3D .obj, mon dessin s'affiche mais là au lieu d'avoir un cube tout simple, j'ai un triangle à 4 côtés
J'ai essayé dans "afficher objet", de mettre dans tous les "glVertex3f" -1, du fait que dans les .obj, les vertex commence à partir de 1 alors qu'en programmation les tableaux commence à 0 et ça ne marche pas mon cube est toujours déformé :
Voici mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part glVertex3f(vertices[ faces[i].a-1 ].x
Et le modèle 3D :
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 #include "CObjet3D.h" #include <GL/gl.h> #include <iostream> #include <fstream> using namespace std; void Cobjet3D::ChargerObjet(char *fichier) { // on ouvre le fichier ifstream FichierSource(fichier); // on vérifie s'il est bien ouvert if(!FichierSource) cout << "Erreur: fichier introuvable" << endl; else { // on lit dans le fichier le nombre de points puis de faces FichierSource >> NbVertex >> NbFaces; // on définit l'espace mémoire necessaire au stockage des points vertices = new VERTEX[NbVertex]; // on stocke les points en mémoire for(unsigned int i=0; i<NbVertex; i++) // pour chaque point { FichierSource >> vertices[i].x // lecture de la coordonnée x >> vertices[i].y // de la coordonnée y >> vertices[i].z; // et de la coordonnée z } // on définit l'espace mémoire necessaire au stockage des faces faces = new FACE[NbFaces]; // on stocke les faces en mémoire for(unsigned int i=0; i<NbFaces; i++) // pour chaque face { FichierSource >> faces[i].a // lecture du point a >> faces[i].b // du point b >> faces[i].c; // et du point c } FichierSource.close(); // on ferme le fichier } } void Cobjet3D::AfficherObjet() { glPushMatrix(); glBegin(GL_TRIANGLES); for(unsigned int i=0; i<NbFaces; i++) { glColor3ub(255, 100, 0); glVertex3f(vertices[ faces[i].a ].x, vertices[ faces[i].a ].y, vertices[ faces[i].a ].z); glVertex3f(vertices[ faces[i].b ].x, vertices[ faces[i].b ].y, vertices[ faces[i].b ].z); glVertex3f(vertices[ faces[i].c ].x, vertices[ faces[i].c ].y, vertices[ faces[i].c ].z); } glEnd(); glPopMatrix(); } void Cobjet3D::LibereObjet() { if(vertices) { delete [] vertices; vertices = NULL; } if(faces) { delete [] faces; faces = NULL; } }
Merci,
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 8 12 -10.1 -7.2 0.0 -7.3 -7.2 0.0 -10.1 -4.4 0.0 -7.3 -4.4 0.0 -10.1 -7.2 2.8 -7.3 -7.2 2.8 -10.1 -4.4 2.8 -7.3 -4.4 2.8 1 3 4 4 2 1 5 6 8 8 7 5 1 2 6 6 5 1 2 4 8 8 6 2 4 3 7 7 8 4 3 1 5 5 7 3![]()
Partager