Sommaire

Scène 3D

Fiche technique

A propos

I. Copyright

Ce programme de scène 3D a été réalisé dans le cadre du projet de Lex & Yacc par deux étudiants de Licence 3 Informatique lors du cycle 2010 - 2011 :

II. Au moment de commencer

Ce programme répond à l'énoncé suivant :

Décrivez des scènes 2D ou 3D, dans un format libre et visualisez les en OpenGl. Par exemple, les scènes 2D sont constituées de carrés, de cercles, de polygones, de segments... Les scènes 3D sont constituées de cubes, de tétraèdres, de sphères, etc.

Le langage de description n’a pas à fournir les variables, les boucles, ni les fonctions. Vous pouvez réutiliser ou vous inspirer du fichier fig.cpp.

Notre programme permet de définir des formes 3D à représenter. La caméra, la lumière et le rendu sont gérés directement par OpenGL et non pas par des instructions du langage. Pour information, vous pouvez zoomer Z ou dézoomer z. Vous pouvez faire pivoter la scène dans tous les axes avec les touches directionnelles , , et .

III. Installation et compilation

A. Prérequis

Voici la liste des prérequis pour l'installation et la compilation du projet :

B. Compilation

Vous pouvez compiler les sources de la manière suivante :

$ cd ./src/
$ make clean
$ make

Un exécutable nommé scene est alors généré.

C. Exécution

Le mode interactif se lance par la commande :

$ cd ./src/
$ ./scene

Vous pouvez également précharger le contenu d'un fichier en suivant cet exemple :

$ cd ./src/
$ cat unfichier | ./scene

Deux exemples ont été ajoutés aux sources :

$ cd ./src/
$ cat ../exemple/lex | ./scene

$ cd ./src/
$ cat ../exemple/teapot | ./scene

IV. Référence du langage

A. Domaines

Différents domaines sont utilisés dans le langage. Il s'agit d'intervalle de validité pour les paramètres des instructions. Voici la liste exhaustive :

{COLOR}    = Entier [0 ; 255]
{INTEGER}  = Entier [-Inf ; +Inf]
{ANGLE}    = Entier [0 ; 360]
{SHAPE}    = {cone;cube;cylinder;sphere;teapot;tetrahedron;torus}
{SIZE}     = Entier [1 ; +Inf].

B. Instructions

Une forme à dessiner est décrite entre les instructions begin et endqui constitue un bloc. D'autres instructions permettent de personnaliser cette forme.

begin
color {COLOR} {COLOR} {COLOR}
move {INTEGER} {INTEGER} {INTEGER}
position {INTEGER} {INTEGER} {INTEGER}
rotate {ANGLE} {ANGLE} {ANGLE}
scale {INTEGER} {INTEGER} {INTEGER}
shape {SHAPE}
size {SIZE}
end

L'instruction color permet de fixer la couleur de la forme via la codification RGB. La valeur par défaut est 128 128 128 ; soit du gris.

L'instruction move permet de déplacer la forme selon les axes X Y Z. La valeur par défaut est 0 0 0 ; aucun déplacement.

L'instruction position permet de placer la forme selon les axes X Y Z. La valeur par défaut est l'origine du repère, 0 0 0.

L'instruction rotate permet de faire pivoter la forme selon les axes X Y Z. La valeur par défaut des angles (en degré) est 0 0 0 ; aucune rotation.

L'instruction scale permet de faire un agrandissement ou une réduction de la forme selon les axes X Y Z. La valeur par défaut est 1 1 1 ; taille originale.

L'instruction shape permet de définir la forme.

L'instruction size permet de définir la taille ; selon la forme, il s'agit du rayon, de la longueur, etc. La valeur par défaut est 1.

Quand l'ensemble des formes est défini, l'instruction draw permet de lancer le rendu OpenGL.

A tout moment, les instructions exit ou quit permettent de quitter l'application (sauf si le rendu OpenGL est déjà lancé auquel cas il faut cliquer sur la croix).

Enfin, en plus des messages d'aide en cas d'erreur lors de la saisie des instructions, ces commandes ont été ajoutées :

help
help begin
help color
help draw
help end
help exit
help help
help move
help position
help quit
help rotate
help scale
help shape
help size

V. Considérations techniques

A. Le projet

L'ensemble du projet a été développé à partir de zéro à l'aide des langages Lex et C++. C'est à dire qu'il ne s'agit pas là d'une simple adaptation d'un exemple de script disponible sur l'UFR Sciences Tech.

Pour des questions d'efficacité, le projet s'appuie au maximum sur les classes de la STL (Standard Template Library) de C++.

L'ensemble des sources a été commenté selon des conventions traditionnelles.

Le développement respecte le modèle MVC. C'est à dire que l'IHM a été séparée au mieux de la couche de données.

Ainsi, la classe Scene modélise la scène OpenGL. La classe Point est utilisée par la classe Scene. Ces deux classes constituent l'IHM.

La classe Objet est la couche de données. Toutes les propriétés des formes qui devront être dessinées sont stockées dans ces objets.

Les instructions du langage et l'aide de l'application sont volontairement en anglais.

Actuellement, l'application gère 7 formes. Comme améliorations, on pourrait gérer d'autres formes 3D en s'appuyant sur les basiques d'OpenGL :

On pourrait également ajouter des formes 2D :

La gestion des lumières et des textures pourrait également être ajouté au langage.

Le langage pourrait en outre se voir offrir une gestion des animations.

Bref, ce projet est une première version et beaucoup de fonctionnalités supplémentaires pourraient enrichir ce programme dans l'avenir.

B. Le README

Ce README est au format markdown. Une version (X)HTML peut facilement être générée à l'aide de la commande markdown via :

$ markdown README.md > README.html

C. Les sources

Une documentation des sources peut être générée à l'aide d'un outil tel que Doxygen.

Essayer

Ce programme n'est pas un projet web. Veuillez consulter la rubrique Aller à la rubrique Sources Sources.

Contact : bug, commentaire, critique, remarque, suggestion...

Pour tout bug, commentaire, toute critique, remarque, suggestion ou simplement si vous souhaitez participer ou contribuer, utilisez le formulaire de contact du site.

Changelog

Scène 3D 1.0.0

  NEW - Création de l'application

Sources

Si vous souhaitez obtenir les sources de ce projet, veuillez les télécharger directement depuis le dépôt SVN du projet.