Bonjour,
je suis actuellement train de faire un petit moteur, base directement sur OpenGL.
J'ai une architecture arborescente, qui est compose de Noeuds, positionnés et orientes par rapport a leur parent.
par exemple :
-Root
---+ Voiture
-----+ Roue
-------+ Frein
au début, chaque noeud dessinait ses enfants, a coup de push / pop matrix et en utilisant des translate rotate pour correctement se positionner par rapport a son parent.
Or maintenant, je voudrais de-corréler le dessin de la relation arborescente. En effet (ce n'est pas un bon exemple) mais je voudrais pouvoir dessiner ma voiture après ma roue.
pour cela, j'ai mis en place ce système :
- chaque noeud ne dessine plus ses enfants, mais calcule juste leur matrice de transformation globale par rapport au root node (donc la plus d'opengl, je calcul mes matrice moi meme en fonction des vecteurs de transformation)
- chaque noeud est ensuite pushe (avec sa matrice globale pre-calcule) dans une liste d'affichage que je maintient ordonne selon certains critères. par ex: distance par rapport a la camera, priorité de dessin de l'object etc.
(C'est mon ancienne methode draw() dans mon noeud)
- une fois tout les noeuds calcule, je dessine tout les noeuds contenu dans ma liste dans l'ordre ou celle ci est trie.
le principe n'est je pense pas mauvais, mais cela implique un paquet de mulmatrix (un pour chaque noeud dessine), alors qu'avant j'avais une série de translate, rotate et scale (aussi pour chaque noeud). Plus l'overhead pour stocker la matrice pre-calcule jusqu'a que le noeud soit pop de ma liste, donc dessine.
je voulais savoir si cela était une bonne approche pour ce que je veux faire, et si ma nouvelle methode est plus coûteuse que cumuler les translate etc...
Sinon y a t il une meilleure approche ?
merci d'avance
Partager