Cette page explique :
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Le graphe de scène défini par la classe Scene permet de gérer les différents objets de la scène :
- Chaque objet que nous souhaitons simuler doit hérité d'une classe nommée Noeud
- La classe Scene contient la liste des Noeud de la scène
- Les différentes méthodes de Scene vont permettre d'appeler les méthodes correspondantes pour chacun des objets Noeud attaché à 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).
Le programme principal main contient un objet Scene correspondant au graphe de la scène. Cet objet contient une liste de tous les objets ObjetSimule qui vont être simulés, attachés à la scène au sein du programme principal (voir Le graphe de scène).
Une fois tous les objets attachés au graphe de scène, les méthodes suivantes de l'objet Scene sont invoquées (répercutant leur appel sur tous les objets attachés à la scène) :
- init() : initialisation des objets simulés.
- Simulation() : simulation des objets de la scène.
A noter que, la gravité et la viscosité du milieu sont définies dans la Scene, c'est-à-dire que leurs propriétés sont identiques pour chacun des objets simulés. Leurs caractéristiques sont fournies au lancement de l'application via le fichier de données.
Les principaux types de structures de données utilisés dans le module de simulation sont les suivants :
- std::vector<float> :
- Essentiellement utilisé pour stocker les masses des particules
- std::vector<Coord> :
- avec Coord la structure définissant des coordonnées 3D
- Essentiellement utilisé pour stocker les positions, vitesses, accélérations et forces des particules
L'application permet l'animation d'objets 3D déformables. Ces objets sont ainsi représentés par un système masses-ressorts c'est-à-dire par un ensemble de particules connectées entre elles par des ressorts.
Les principales classes définies pour modéliser un objet sont ainsi les suivantes :
- Spring :
- permet de stocker les caractéristiques physiques des ressorts (raideur, amortissement, longueur au repos et viscosité)
- Particule :
- définition physique d'une particule
- est constituée d'un identifiant, d'une position, et de la liste des ressorts auxquels la particule est reliée
- Ressort :
- définition géométrique d'un ressort
- est constitué d'un identifiant, d'un Spring contenant ces propriétés, et des deux indices des particules auxquelles le ressort est relié
Les principales structures de données des objets simulés sont les suivantes :
La structure Maillage définit le Mesh relatif à l'objet simulé. Ainsi, tout objet de la scène est discrétisé en un ensemble de Particule qui sont reliées entre elles par des Ressort. A noter que pour le moment, tous les ressorts d'un même objet ont les mêmes caractéristiques physiques définies par l'utilisateur. Il sera possible d'ajouter ultérieurement ces caractéristiques pour chacun des ressorts constituant le maillage en les mettant par exemple dans un fichier de données. Ce Maillage est créé lors de l'initialisation de l'objet simulé, notamment à partir du fichier des facettes fourni en paramètre de l'objet à simuler. Ce maillage est utilisé pour connaître les interactions qui existent entre les particules d'un objet donné.
La structure P contient les coordonnées de positions des particules constituant l'objet à simuler. Cette structure est initialisée à partir du fichier de données correspondant rattaché à l'objet.
La structure V contient les coordonnées de vitesses des particules constituant l'objet à simuler. Les éléments de cette structure sont initialisés à zéro au départ.
La structure A contient les coordonnées des accélérations des particules constituant l'objet à simuler. Les éléments de cette structure sont initialisés à zéro au départ.
La structure Force contient les coordonnées des forces appliquées aux particules constituant l'objet à simuler. Les éléments de cette structure sont initialisés à zéro au départ.
La structure M contient les coordonnées de positions des particules constituant l'objet à simuler. Cette structure est initialisée à partir du fichier de données correspondant rattaché à l'objet.
A chaque pas de temps, les calculs suivants sont effectués pour un objet donné :
Les forces f appliquées aux particules constituant un objet sont dues à la gravité du milieu ainsi qu'aux interactions des autres particules constituant l'objet. La force appliquée à la ième particule du système peut ainsi être formulée 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),$](form_4.png)
avec :

où :
- E représente l'ensemble des arêtes du système à particules,
est la constante de raideur des ressorts,
est la constante d'amortissement des ressorts,
est la longueur du ressort au repos reliant la particule i et la particule j,
représente le vecteur de la gravité,- et
est un vecteur unitaire défini par
.
Pour des raisons d'implémentation, les forces dues à la gravité sont en fait ajoutées dans le calcul des accélérations.
Les accélérations des particules sont obtenues à partir de leurs forces en utilisant la loi fondamentale de la dynamique, avec
où
est l'accélération de la particule i,
la force appliquée sur cette particule, et
sa masse.
C'est au sein de cette méthode que le vecteur des forces est réinitialisé.
Les vitesses et les positions des particules sont obtenues en utilisant la méthode explicite de Leap-Frog Verlet :
Généré le Thu Jan 24 19:12:00 2008 pour Animation 3D par
1.5.1