L`interet principal des composants de rendu.

ODFAEG possède plusieurs composants de rendu, certains permettent de dessiner des types d'entités de manière différentes, d'autres permettent de dessiner un effet (une lumière par exemple) à l'aide des entités que leurs sont fournis. Voici une présentation des différents type de composants de rendu géré par ODFAEG actuellement : ZSortingRenderComponent : dessine de l'entité la plus éloignée vers l'entité la plus proche. OITRenderComponent : dessine les entités dans n'importe quel ordre tout en gérant la transparence. LightRenderComponent : dessine des lumières en fonction des entités qui lui sont fournies. ShadowRenderComponent : dessine des ombres en fonction des entités qui lui sont fournies.


Créer des composants de rendus et les ajouter à la scene.

Pour créer un composant il faut appeler le constructeur de la classe RenderComponent.
Celui-ci prend 3 paramètres obligatoires : une référence vers la fenêtre de rendu de l'application, un nombre
indiquant l'id du composant, 0 signifie que le composant de rendu sera afficher en premier, 1, en deuxième, etc...
Le troisième paramètre est une chaînes de caractère qui indique le type d'entité(s) que l'on souhaite dessiner sur le composant.
"E_DECOR" par exemple signifie que l'on va dessiner toutes les entités de type E_DECOR sur le composant.
On peut dessiner plusieurs type d'entités, grâce au + : "E_DECOR+E_WALL" qui va dessiner toutes les entités
de type décors et murs sur les composants.
"*-E_CARACTER" va dessiner toutes les entités sauf celles de type E_CARACTER.
Bref vous l'avez compris, ceci n'est pas du tout compliqué à définir.
Pour ajouté un composant de rendu il faut appelé la méthode addComponent de la classe RendercomponentManager comme ceci : ZSortingRenderComponent *frc1 = new ZSortingRenderComponent(getRenderWindow(),0, "E_BIGTILE"); //Création du composant de rendu. getRenderComponentManager().addComponent(frc1); //Récupère le gestionnaire des composants de rendu de l'application et ajoute le composant.

Le gestionnaire de composant va se charger de dessiner tout les composants sur la fenêtre de rendu, et va, également,
traiter tout les événements interne liés au composant comme par exemple le rafraichissement des composants!
A chaque tour de boucle vous devez définir ce qui devra être dessiner sur les composants de rendu.
Ceci se fait dans la méthode onRender, qui à chaque tour de boucle va rechercher les entités présente dans
la vue du composant via le gestionnaire d'entités et les charger sur le composants de rendu pour ensuite, les dessiner.
World::drawOnComponents("E_BIGTILE", 0);
World::drawOnComponents("E_WALL+E_DECOR+E_ANIMATION+E_CARACTER", 1);

Le gestionnaire d'entité du framework charge donc toutes les entités visible sur les composants de rendu, et ensuite il
recherche toutes les entités qui sont visibles sur la fenêtre de rendu!
Vous n'êtes donc pas obligé de dessiner directement sur les composants de rendu et utiliser la méthode World::getVisibleEntities("expression")
mais ceci est déconseillé si vous ne voulez pas vous embêter avec la semi-transparence, le calcul des normales, etc...

Les différents type de composants

ZSortingOrdercomponent : dessine toutes les entités de la plus éloignée à la plus proche, ce composant récupère les sommets
de toutes les entités, les transformes et dessine tout en une fois, ça à l'avantage d'être rapide par contre ça ne fonctionnera
pas si vos entités utilisent des textures différentes, vous aurez églament des problèmes avec la transparence si les entités s'entre
croisent. Si vous être dans l'un de ces deux cas là utiliser OITRenderComponent.
Ce composant est bien pour dessiner un sol par exemple. (A condition d'utiliser la même texture pour dessiner tout le sol)
OITRendercomponent : dessine les entités une par une en gérant la transparence, le problème de ce composant de rendu c'est qu'il est
lent. Il ne faut donc pas dessiner trop de choses dessus, ce composants est utiles pour dessiner des décors par exemple ou
la texture serait trop grande si l'on dessinait toute les images de tout les décors sur la même texture.
Voila, pas besoin d'en dire plus à propos des composants de rendu, maintenant vous savez ce qu'ils permettent de faire!
ShadowRenderComponent : il vous faut passer toutes les entités pour lesquelles vous souhaiter dessiner les ombres.
LightRendercomponent : il vous faut passer toutes les entités qui sont des lumières, si vous passer des autres entités,
les normales seront calculées et si l'entité se trouve devant la lumière elle cachera la lumière.