question sur les listes d'objets... [OPEN GL] - Divers - Programmation
Marsh Posté le 18-12-2002 à 11:28:36
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.
|
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 ...
Marsh Posté le 18-12-2002 à 11:32:39
Instinctivement, ça me semble plus propre. Mais ça doit faire plus de calculs...
D'autres avis ?
Marsh Posté le 18-12-2002 à 12:11:58
jotb a écrit : Cette solution me semble plus propre. Me conseillez vous de procéder ainsi ? |
tout ce qui est propre est à conseiller
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).
Marsh Posté le 18-12-2002 à 12:23:35
youdontcare a écrit : tout ce qui est propre est à conseiller |
là c'est un peu compliqué. La matrice de l'objet se complète quand je pose un glVertex3f(...), c'est ça ?
Marsh Posté le 18-12-2002 à 12:29:56
jotb a écrit : La matrice de l'objet se complète quand je pose un glVertex3f(...), c'est ça ? |
pas compris.
Marsh Posté le 18-12-2002 à 12:30:35
ReplyMarsh Posté le 18-12-2002 à 12:46:32
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).
Marsh Posté le 18-12-2002 à 12:50:36
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). |
Bouge pas, je vais te MP un exemple...
Marsh Posté le 18-12-2002 à 11:14:15
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
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 :
Eh bien j'arrive au même résultat.
Cette solution me semble plus propre. Me conseillez vous de procéder ainsi ?