Bonjour,
Je suis en train de faire un moteur de rendu et simulation 3D. J'ai commencé par implémenter un moteur graphique. Le coeur du moteur est composé d'une arborescence de Noeuds (relation parent/enfants). Chaque noeud est positionné dans l'espace, sais dessiner un mesh qui lui est propre etc.
Ainsi par exemple pour une voiture j'aurais l'objet voiture qui possède 4 enfants qui sont des objets roue, et un autre enfant qui est un objet Pilote.
La ou ça se complique, c'est lorsque j'ai besoin de modéliser un comportement avancé qui n'a pas d'impact graphique.
Pour modéliser ce comportement j'aurais besoin de séparer la couche métier de mes classe Noeuds de leur couche graphique. En effet le plus souvent ma couche métier n'aura pas la même hiérarchie que ma couche graphique.
par exemple, pour la partie graphique de la classe Pilote, afin que celui ci soit bien positionné par rapport a la voiture et bouge avec etc, ca semble logique que celui ci soit enfant de la voiture.
par contre, au niveau comportement, ca serai bien pratique que son parent ne soit pas la voiture, qui n'a évidement pas a controler le comportement du pilote, mais plutôt QG d'ecurie.
J'en suis donc arrivé a la conclusion, qu'il me faut deux arborescence. une de noeuds 'graphique', avec logique de hiérarchie d'affichage, et une de noeuds 'model' (au sens modèle comportemental) avec une logique de hiérarchie métier.
Toute l'intelligence est faite par l'arborescence Model, (ou le parent du pilote est bien QG ecurie). Chaque model pointe sur son noeud graphique (s'il en a un), et sais modifier les paramètres du noeud graphique comme bon lui semble (couleur, position etc). Le parent du noeud graphique gère lui, l'affichage logique de ses enfants.
Tout ca étant dit, ca pose d'énormes problèmes de synchronisation/gestion et autres, entre les deux arbres.
Le cas simple ou le pilote change d'écurie: l'instance de la classe modelPilote change de parent c'est simple. par contre qui s'occupe de dire au noeud graphicPilote associé que son parent n'est plus la même graphicVoiture ? Ca ne peut pas être modelPilote qui elle n'a rien a faire du parent graphique de son noeud graphicPilote, et qui ne sais da'illeurs probablement pas quel graphicVoiture sera le nouveau parent.
La plus part du temps dans les gros moteurs graphique open source, on n'a justement que la partie graphique qui est géré. on a souvent une arborescence de noeuds etc, mais tout est purement graphique.
- Savez vous quel pattern ou ensemble de pattern peuvent être utilisés pour réaliser ce que j'essaye de faire ?
- De manière générale comment est fait la séparation entre la modélisation comportementale et l'affichage dans les gros moteur de jeu ou de simu ?
- et au final est ce vraiment nécessaire comme séparation, n'y a t il pas d'autres solutions radicalement différentes ou plus pratique ?
Dsl pour les explications un peu longues, mais je n'ai pas reussi a faire plus court .
Partager