Animation 3D (master_meca_sim)
Animation 3D - Documentation

Cette page explique :


Comment lancer l'application ?

Repertoire ou se trouvent les donnees : gkit2light/data/

Plusieurs fichiers dans ces repertoires

Repertoire pour l'execution de l'application : gkit2light/src/master_MecaSim/exec/

Pour lancer l'application depuis le repertoire gkit2light


Viewer de l'application

La methode init() de Viewer (dans Vierwer-init.cpp) permet de creer le maillage des objets servant pour leur affichage.

La methode render() de Viewer permet l'affichage les maillages (de type Mesh) des objets de la scene. Pour cela nous invoquons gl.draw() sur les Mesh des elements de la Scene. La classe Noeud comporte ainsi le membre m_ObjetSimule de type Mesh (maillage servant a l'affichage des objets simules).

La methode update() de Viewer permet de mettre a jour le Mesh des objets (maillage de l objet cree pour effectuer l affichage) en invoquant la methode updateVertex() pour chacun des elements du graphe de scene. La methode Simulation est notamment invoquee dans cette methode.

La touche 'h' permet de faire apparaitre le menu d'aide de l'application : affichage plein ecran, zoom, etc.


Le graphe de scene

Le graphe de scene est defini dans la classe Viewer par la variable _Simu de type Scene. Il permet de gerer les differents objets de la scene (qui sont attaches a la scene des leur creation).


Representation d'un objet de la scene pour le visualiser

Les principales structures de donnees relatives a un objet pour effectuer sont affichages sont les suivantes :


Representation d'un objet de la scene pour l'animer

Les objets simules sont de type ObjetSimule comportant les elements suivants :

Pour un objet simule de type ObjetSimuleMSS qui est ainsi represente par un systeme masses-ressorts, nous utilisons un element appele _SytemeMasseRessort de type MSS.

La class SolveurExpl permet de gerer un solveur suivant la methode d'Euler semi-implicite.

La class SolveurImpl permet de gerer un solveur suivant la methode d'Euler implicite.


Algorithmes de la simulation

Boucle de la simulation

A chaque pas de temps, les calculs suivants sont effectues pour un objet donne :

Calcul des forces

Les forces f appliquees aux particules constituant un objet sont dues a la gravite du milieu ainsi qu'aux interactions des autres particules constituant l'objet. La force appliquee a la ieme particule du systeme peut ainsi etre formulee par :

$ \vec{f}_i(t) = \sum_{j\mid(i,j)\in E} \left[\vec{f}^{e}_{i,j}(t) + \vec{f}^{v}_{i,j}(t) \right] \: + m_i \vec{g} +\: \vec{f}_{externe}(t),$

avec :

$ \left\{ \begin{array}{lcl} \vec{f}^{e}_{i,j}(t) &=& k_{ij} \left(\|x_i(t) - x_j(t)\| - l_{ij}\right)\; \vec{u}_{ij}(t),\\ \vec{f}^{v}_{i,j}(t) &=& {\nu}_{ij} \left(v_i(t) - v_j(t)\right) \; \vec{u}_{ij}(t) \; \vec{u}_{ij}(t), \end{array} \right. $

ou :

Pour des raisons d'implementation, les forces dues a la gravite sont en fait ajoutees dans le calcul des accelerations.

Calcul des accelerations

Les accelerations des particules sont obtenues a partir de leurs forces en utilisant la loi fondamentale de la dynamique, avec $ a_i = \frac{f_i}{m_i} $ ou $a_i$ est l'acceleration de la particule i, $f_i $ la force appliquee sur cette particule, et $m_i $ sa masse.

C'est au sein de cette methode que le vecteur des forces est reinitialise.

Calcul des vitesses et des positions

Les vitesses et les positions des particules sont obtenues en utilisant la methode explicite de Leap-Frog Verlet :

$ \begin{array}{lr} \left\{ \begin{array}{ccl} v(t_0) &=& v_0\\ v(\frac{h}{2}) &=& v_0 + \frac{h}{2}v'_0\\ x(t_0) &=& x_0 \end{array} \right., & \left\{ \begin{array}{ccl} v(t+\frac{h}{2}) &=& v(t-\frac{h}{2}) + hv'(t) \\ x(t+h) &=& x(t) + hv(t+\frac{h}{2}) \end{array} \right.. \end{array} $


Calculs effectues pour la visualisation

Calcul de la normale d'une face

Considerons une facette definie par les sommets A, B et C. La normale de cette facette est alors definie 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} $ ou x, y et z sont les coordonnees de $ \vec{u} $.

Lissage des normales des sommets

Afin d'eviter d'avoir des "pics" entre les facettes, il faut lisser les normales des sommets. Voici les etapes de ce lissage :