Probleme pour charger un objet 3D (.obj) dans une scene

adess00 Messages postés 261 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 27 septembre 2008 - 13 avril 2006 à 11:35
souf_ Messages postés 7 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 1 octobre 2006 - 1 oct. 2006 à 21:29
Salut salut

Donc en faite je vien de faire une f° qui recupere les vertices dans le fichier .obj . Pour tester j ai pris un cube, mais le probleme est que d habitude pour faire un cube j utilise 24 vertices en creant les 6 faces donc j ai fait tout sa pour rien j ai toujours pas mon cube :(

Je voudrais donc savoir comment faire pour le tracer, y a t il une autre methode que de faire les 6 faces ??

Voila le fichier .obj
--------------------------------------
# Max2Obj Version 4.0 Mar 10th, 2001
#
# object Box01 to come ...
#
v -0.50 -0.50 0.00
v 0.50 -0.50 0.00
v -0.50 0.50 0.00
v 0.50 0.50 0.00
v -0.50 -0.50 1.00
v 0.50 -0.50 1.00
v -0.50 0.50 1.00
v 0.50 0.50 1.00
# 8 vertices

g Box01
f 4 2 1 3
f 8 7 5 6
f 6 5 1 2
f 8 6 2 4
f 7 8 4 3
f 5 7 3 1
# 6 faces

g
--------------------------------------

Donc si kkun sait comment on trace un cube a partir de ces donnees

De plus je trouve que c est vraiment pas pratique de mettre le nombre de vertices a la fin de la liste de vertices car je voulais allouer dynamiquement de la memoire a mon tableau qui allait contenir l objet 3D mais la je doit parcourir 2 fois le fichier

Enfin bon si vou avez des elements de reponses merci de me repondre

a+ !

5 réponses

katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
13 avril 2006 à 19:38
Salut :)

Pour ne parcourir le fichier qu'une fois (ce qui est relativement sain)



- D'abord tu remplis le tableau de vertices v[]. Idéalement c'est un tableau de structures Point {float x; float y; float z}.

v[0] = {-0.50, -0.50, 0.00};

v[1] = {0.50, -0.50, 0.00};


etc...



- Ensuite remplir un tableau face f[4]. Une face est définie par 4 points.

On lit pour la première face:

f 4 2 1 3


ca donne:

f[0] =4;

f[1]=2;

f[2]=1;

f[3]=3;




Donc pour tracer cette première face on prend dans la liste de vertices le:

- 4e vertex (0.50 0.50 0.00),

- 2e vertex (0.50 -0.50 0.00),

- 1er vertex (-0.50 -0.50 0.00),

- 3e vertex (-0.50 0.50 0.00)



glBegin(GL_POLYGON);

for (j=0; j<4; j++) // on a 4 vertices

{

glColor3f( 1.0, 0.0, 0.0);

glVertex3f( v[f[j]].x, v[f[j]].y, v[f[j]].z);

}

glEnd();




Et ainsi de suite pour les autres faces. A tous les coups tu es sous directX nan? ehehe
0
adess00 Messages postés 261 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 27 septembre 2008 1
15 avril 2006 à 12:22
Merci de ta reponse
Je suis sous openGL pourquoi directX ?
Sinon j ai tout compris sauf pour le fichier

Mon tableau je dois bien lui donner une taille mais le probleme est que le nombre de faces n apparait qu a la fin du fichier or pour savoir le nombre de vertices que devra contenir mon tableau je dois recuperer les faces je fai x4 et declare un tableau de 24 indices

a+
0
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
19 avril 2006 à 15:06
Ben define MAX_VERTICES 65635 ! Puis remplir le tableau au fur et à mesure.
0
adess00 Messages postés 261 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 27 septembre 2008 1
19 avril 2006 à 16:42
Mais c arbitraire comme valeur sa
Si je charge un objet de plus de 65535 vertices sa ne marchera pas
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
souf_ Messages postés 7 Date d'inscription samedi 6 mai 2006 Statut Membre Dernière intervention 1 octobre 2006
1 oct. 2006 à 21:29
la science ça donne ça se paye pas

bonjour a tous ;
moi le fichier obj porte f 33/69 34/68 42/84 par exemple comment je vais pocéder
merci d'avance
0
Rejoignez-nous