Documentation détaillée de la partie visualisation de l'application

Cette page explique :

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Fonctionnement de la partie visualisation de l'animation 3D

Le graphe de scène

Le graphe de scène défini par la classe Scene permet de gérer les différents objets de la scène :

Les méthodes de la classe Noeud doivent ainsi obligatoirement être implémentées dans les classes relatives aux différents objets de la scène (même si elles ne font rien). Cet appel est mis dans la fonction idle() qui assure également le réaffichage de la scène par la fonction glutPostRedisplay() après la mise à jour des positions des objets animés.

Boucle GLUT

L'application contient un objet Scene correspondant au graphe de la scène qui contient tous les objets qui vont être visualisés. Ces objets sont donc attachés à la scène dès leur création.

La méthode init() permet d'initialiser les objets à partir des données fournies par les fichiers de données (création du maillage, définition des positions des particules du maillage, etc.)

La méthode display() permet l'affichage de la scène selon le type choisi (filaire, remplis, texturé). C'est ainsi dans cette fonction qu'est invoquée la méthode affiche() de chacun des objets de la Scene de type ObjetSimule.

La mise à jour des objets de la scène est effectuée par l'appel de la méthode Simulation() de chacun des objets de la Scene.

Le bouton droit de la souris permet de faire apparaître le menu Glut de l'application : affichage plein écran, zoom, etc.

Représentation d'un objet de la scène

Les principales structures de données relatives à un objet visualisé sont les suivantes :

La variable _Interaction permet de spécifier si il y a une interaction possible entre l'utilisateur et l'objet simulé via le wand. La valeur de cette variable, "yes" ou "no", est fournie par le fichier de données mis en paramètre de l'exécution. (à faire)

La structure _VIndices contient les indices des sommets du maillage décrivant l'objet visualisé. Sa taille est définie par _VISize qui vaut trois fois le nombre de facettes puisqu'une facette est définie par trois sommets. Les trois premiers éléments de cette structure correspondent aux indices des trois sommets définissant la première facette de l'objet. L'ordre des indices des sommets au sein de cette structure suit ainsi l'ordre des facettes contenues dans la structure _vectFaceSet.

La structure P contient les coordonnées de positions des sommets du maillage de l'objet. Sa taille correspond au nombre de particules. Le premier élément de cette structure (de type Coord) correspond ainsi à la coordonnée en x, y et z de la position du premier sommet de l'objet visualisé. L'élément suivant correspond à la coordonnée en x, y, et z du deuxième sommet, et ainsi de suite. Les données de cette structure sont mises à jour par la partie simulation de l'application.

La structure _Normals contient les coordonnées des normales des sommets de l'objet visualisé. Sa taille est définie par _VSize qui est égale à trois fois le nombre de particules. Les trois premiers éléments de _Normals correspondent aux coordonnées en x, y, z de la normale du premier sommet, et ainsi de suite. Les données de cette structure sont calculées à partir des coordonnées de positions des sommets (voir Lissage des normales des sommets).

Algorithmes de la visualisation

Voici les principaux algorithmes implémentées au sein du module de visualisation :

Calcul de la normale d'une face

Considérons une facette définie par les sommets A, B et C. La normale de cette facette est alors définie par $\vec{n} = \frac{\vec{AB} \wedge \vec{AC}}{\| \vec{AB} \wedge \vec{AC} \|}$ avec $\vec{AB} = \left( \begin{array}{c} x_B - x_A\\ y_B - y_A \\ z_B - z_A \end{array} \right) $ et $ \|\vec{u}\| = \sqrt{x^2 + y^2 + z^2} $ où x, y et z sont les coordonnées de $ \vec{u} $.

Lissage des normales des sommets

Afin d'éviter d'avoir des "pics" entre les facettes, il faut lisser les normales des sommets. Voici les étapes de ce lissage :
Généré le Thu Jan 24 19:12:00 2008 pour Animation 3D par  doxygen 1.5.1