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 :

  • PerPixelLinkedListRenderComponent : dessine les entités dans n'importe quel ordre. (Order independant transparency).
  • ReflectRefractRenderComponent : dessine le reflet des entités qui reflète ou réfracte les rayons de lumière.
  • 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.
  • Les autres composants de rendu sont obsolètes.


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

    Pour créer un composant il faut appeler le constructeur d'une de ses 4 classes.
    Celui-ci prend 4 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.
    Et le dernier paramètre qui sont les paramètres d'opengl.
    Pour ajouté un composant de rendu il faut appelé la méthode addComponent de la classe RendercomponentManager comme ceci : PerPixelLinkedListRenderComponent *frc1 = new PerPixelLinkedListRenderComponent(getRenderWindow(),0, "E_BIGTILE", ContextSettings(0,0,4,4,6)); //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 aux composants 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 composant 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

    ReflectRefactRenderComponent : Ce composant dessine le reflet des entités réflectable ou réfractable comme l'eau par exemple, pour qu'une entité soit refractable il faut appeler la méthode setRefractable sur l'entité : tile->setRefractable(true). (
    Il faut passer le type des entités réfractable ou réflectable ainsi que le type des entités à refléter ou à réfracter.
    PerPixelLinkedListRenderComponent : dessine les entités dans n'importe quel ordre, tout en gérant la transparence à l'aide d'une
    "per pixel linked list"! Pour celà il suffit de passer le type des entités à dessiner. 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.