next up previous contents
suivant: Le compilateur monter: Projet de Compilation - précédent: Présentation de OpenGl   Table des matières

Traduction d'une scène Povray en OpenGl

Comme on l'a dit prédemment, les objets et leur attributs sont relativement semblables pour Povray et GLUT. La principale difficulté est donc de parser le fichier contenant la description de la scène pour générer le code C correspondant.

Pour ce projet, on utilise ANTLR, qui permet de générer des parseurs en Java. Il nous est très vite apparu utile de construire un arbre au fur et à mesure que l'on parse le fichier pour des raisons de commodité au moment de la génération du code C. Le langage Java étant un language orienté objet, la tâche n'en est que facilitée.

Chaque objet trouvé est donc stocké dans un arbre, et une fois qu'on a lu tous ses attributs on peut appeler une méthode public qui va générer le code C avec les bons attributs (rayon pour une sphère, couleur, ...).

Pour générer des animations, on utilise une clock, qui prend une valeur de 0 au début de l'animation à 1 en fin d'animation. Cela permet de préciser de quel angle l'objet doit être déplacé (pour une rotation, translation, ...). La valeur de la variable étant incrémentée au cours de l'animation, le déplacement de l'objet varie entre chaque image, créant ainsi l'illusion d'une animation.

On est donc obligé d'utiliser des expressions pour reconnaître ce type de données (180 * clock, par exemple, doît pouvoir être reconnu comme une expression valide). En même temps qu'on reconnaît une expression, on contruit un arbre pour cette expression afin de pouvoir par la suite la simplifier ou l'évaluer en partie 2 (par exemple, - - 3 pourrait être remplacé par + 3 ou 4 + 10 + 180 * clock par 14 * clock). L'arbre construit permet d'évaluer l'expression selon la priorité de chaque opérateur en effectuant un parcours en profondeur gauche.


next up previous contents
suivant: Le compilateur monter: Projet de Compilation - précédent: Présentation de OpenGl   Table des matières
Mathieu DECORE <mdecore@linux-france.org>