Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1376 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  [OPEN GL] question sur les listes d'objets...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[OPEN GL] question sur les listes d'objets...

n°271992
jotb
Mon nom est Capitaine.
Posté le 18-12-2002 à 11:14:15  profilanswer
 

J'ai un projet à faire où on doit notamment modéliser la fusée de Tintin, et je débute en OpenGL.  
 
J'ai donc crée mes fonctions fuselage, ailette et amortisseur, qui représentent les parties de cette fusée.  
J'ai une liste comme ceci

Code :
  1. glNewList(FUSEE, GL_COMPILE);
  2. Fuselage();
  3. Ailette();
  4. Amortisseur();
  5. glEndList();


 
Le truc c'est que la fusée de Tintin a 3 "pates", donc j'ai calculé à la main les rotations et je les ai inclus dans les fonctions ailette et amortisseur à la barbare.  
Résultat : des fonctions immenses et où je fais 3 fois la même chose.
Je viens de découvrir qu'en enlevant mes rotations à la porc, et en écrivant :

Code :
  1. glNewList(FUSEE, GL_COMPILE);
  2. Fuselage();
  3. Ailette();
  4. Amortisseur();
  5. glPushMatrix();
  6.  glRotatef(120, 0, 1, 0);
  7.  Ailette();
  8.  Amortisseur();
  9.  glRotatef(120, 0, 1, 0);
  10.  Ailette();
  11.  Amortisseur();
  12. glPopMatrix();
  13. glEndList();


 
Eh bien j'arrive au même résultat.  
Cette solution me semble plus propre. Me conseillez vous de procéder ainsi ?

mood
Publicité
Posté le 18-12-2002 à 11:14:15  profilanswer
 

n°272005
tomlameche
Et pourquoi pas ?
Posté le 18-12-2002 à 11:28:36  profilanswer
 

jotb a écrit :

J'ai un projet à faire où on doit notamment modéliser la fusée de Tintin, et je débute en OpenGL.  
 
J'ai donc crée mes fonctions fuselage, ailette et amortisseur, qui représentent les parties de cette fusée.  
J'ai une liste comme ceci

Code :
  1. glNewList(FUSEE, GL_COMPILE);
  2. Fuselage();
  3. Ailette();
  4. Amortisseur();
  5. glEndList();


 
Le truc c'est que la fusée de Tintin a 3 "pates", donc j'ai calculé à la main les rotations et je les ai inclus dans les fonctions ailette et amortisseur à la barbare.  
Résultat : des fonctions immenses et où je fais 3 fois la même chose.
Je viens de découvrir qu'en enlevant mes rotations à la porc, et en écrivant :

Code :
  1. glNewList(FUSEE, GL_COMPILE);
  2. Fuselage();
  3. Ailette();
  4. Amortisseur();
  5. glPushMatrix();
  6.  glRotatef(120, 0, 1, 0);
  7.  Ailette();
  8.  Amortisseur();
  9.  glRotatef(120, 0, 1, 0);
  10.  Ailette();
  11.  Amortisseur();
  12. glPopMatrix();
  13. glEndList();


 
Eh bien j'arrive au même résultat.  
Cette solution me semble plus propre. Me conseillez vous de procéder ainsi ?


Ben quand je faisais de l'OpenGl, je faisais comme ça. Mais bon, je suis pas du tout un spécialiste, donc mon avis ne doit pas valoir grand chose ... :(  


---------------
Gérez votre collection de BD en ligne ! ---- Electro-jazzy song ---- Dazie Mae - jazzy/bluesy/cabaret et plus si affinité
n°272009
jotb
Mon nom est Capitaine.
Posté le 18-12-2002 à 11:32:39  profilanswer
 

Instinctivement, ça me semble plus propre. Mais ça doit faire plus de calculs...  
 
D'autres avis ?  :??:

n°272057
youdontcar​e
Posté le 18-12-2002 à 12:11:58  profilanswer
 

jotb a écrit :

Cette solution me semble plus propre. Me conseillez vous de procéder ainsi ?

tout ce qui est propre est à conseiller :D
 
le plus propre reste d'avoir une méthode 'générique' d'affichage, prenant en paramètre une structure contenant un matériau + points & vertices + matrice de l'objet.  
 
tu peux créer ces objets au début de ton programme, mais tu peux encore faire plus propre : un fichier (texte, + simple) contenant le nom de l'objet (fusée), les objets divers (fuselage, ailette, amortisseur), les instances (dessiner l'ailette avec telle matrice).

n°272073
jotb
Mon nom est Capitaine.
Posté le 18-12-2002 à 12:23:35  profilanswer
 

youdontcare a écrit :

tout ce qui est propre est à conseiller :D
 
le plus propre reste d'avoir une méthode 'générique' d'affichage, prenant en paramètre une structure contenant un matériau + points & vertices + matrice de l'objet.
tu peux créer ces objets au début de ton programme, mais tu peux encore faire plus propre : un fichier (texte, + simple) contenant le nom de l'objet (fusée), les objets divers (fuselage, ailette, amortisseur), les instances (dessiner l'ailette avec telle matrice).


 
là c'est un peu compliqué. La matrice de l'objet se complète quand je pose un glVertex3f(...), c'est ça ?

n°272078
youdontcar​e
Posté le 18-12-2002 à 12:29:56  profilanswer
 

jotb a écrit :

La matrice de l'objet se complète quand je pose un glVertex3f(...), c'est ça ?

pas compris.

n°272080
jotb
Mon nom est Capitaine.
Posté le 18-12-2002 à 12:30:35  profilanswer
 


 
ben c'est quoi ce que t'appelle la matrice de l'objet ?  

n°272092
youdontcar​e
Posté le 18-12-2002 à 12:46:32  profilanswer
 

jotb a écrit :

ben c'est quoi ce que t'appelle la matrice de l'objet ?

glRotatef(120, 0, 1, 0); & co. tu peux voir que chaque objet possède une matrice d'orientation : si tu traces deux objets à la suite, c'est juste la même matrice. ton glRotate 'rajoute' une rotation à la matrice courante. le tracé d'ailette trace trois ailettes aux angles 0°, 120°, 240° (angles absolus).
 
le 'problème' de ton code, c'est qu'il ne peut tracer qu'un seul type d'objet : la fusée (fonctions Fuselage() & co). si tu veux améliorer ton code, une chose à faire est de se débarasser de ces fonctions et de n'avoir qu'une seule fonction de tracé d'objet, qui prend les paramètres cités plus haut. (ça reste à voir jusqu'à quel point c'est modifiable vu que tu ne files pas le code de Fuselage(), Ailette() & co).

n°272097
jotb
Mon nom est Capitaine.
Posté le 18-12-2002 à 12:50:36  profilanswer
 

youdontcare a écrit :

glRotatef(120, 0, 1, 0); & co. tu peux voir que chaque objet possède une matrice d'orientation : si tu traces deux objets à la suite, c'est juste la même matrice. ton glRotate 'rajoute' une rotation à la matrice courante. le tracé d'ailette trace trois ailettes aux angles 0°, 120°, 240° (angles absolus).
 
le 'problème' de ton code, c'est qu'il ne peut tracer qu'un seul type d'objet : la fusée (fonctions Fuselage() & co). si tu veux améliorer ton code, une chose à faire est de se débarasser de ces fonctions et de n'avoir qu'une seule fonction de tracé d'objet, qui prend les paramètres cités plus haut. (ça reste à voir jusqu'à quel point c'est modifiable vu que tu ne files pas le code de Fuselage(), Ailette() & co).


 
Bouge pas, je vais te MP un exemple...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  [OPEN GL] question sur les listes d'objets...

 

Sujets relatifs
[open gl]comment afficher un objet qui est dans un fichier 3D s max?Question toute bete sur onclick --> lien
Question sur le W3Cquestion mysql :phpmyadmin ??
[C] quelqu'un aurais un cours sur les listes ?question bete : probleme dans la déclaration d'un tableau
Resalut a vous les masters java , question de newbie 2eme volet :[TOMCAT] question newbie
[VB]création dynamique d'objets et index....question sur les downloads...
Plus de sujets relatifs à : [OPEN GL] question sur les listes d'objets...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR