10.03.2014 Views

IN - Chapitre 4 - Animation - IUT d'Arles

IN - Chapitre 4 - Animation - IUT d'Arles

IN - Chapitre 4 - Animation - IUT d'Arles

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Imagerie Numérique<br />

Synthèse d’images<br />

4. <strong>Animation</strong><br />

DUT Informatique 2012-2013<br />

Sébastien THON<br />

<strong>IUT</strong> de l’Université de Provence, site d’Arles<br />

Département Informatique


Introduction<br />

<strong>Animation</strong> = succession d’images fixes, à une fréquence suffisante pour<br />

tromper l’œil (cinéma : 24 images/sec).<br />

(FPS : « Frames Per Second »)<br />

Pour produire une animation : modifier la position d’objets<br />

au cours du temps.<br />

2


En synthèse d’images, 2 types d’animation :<br />

- <strong>Animation</strong> 3D temps réel<br />

Ex: simulateur, jeu, …<br />

Produit avec une librairie graphique (OpenGL, DirectX, …).<br />

Il faut calculer suffisamment d'images par seconde. Le nombre de FPS<br />

dépend de la machine.<br />

- <strong>Animation</strong> 3D précalculée<br />

Ex: film d’animation, effets spéciaux, …<br />

Produit avec un logiciel de synthèse d’images (3D Studio Max, Maya,<br />

Lightwave, …).<br />

On peut passer plusieurs minutes ou heures pour calculer une image.<br />

3


3 étapes :<br />

- Modélisation<br />

Représenter les objets par des modèles 3D.<br />

- <strong>Animation</strong><br />

Associer un mouvement aux objets.<br />

- Rendu<br />

Créer les images qui composent l’animation.<br />

Modélisation<br />

<strong>Animation</strong><br />

Rendu<br />

Dans le cas d’une animation<br />

temps-réel, il faut que cette<br />

boucle soit la plus rapide<br />

possible (effectuée au moins<br />

20 fois par seconde 20<br />

FPS)<br />

4


<strong>Animation</strong> temps réel<br />

Modélisation<br />

<strong>Animation</strong><br />

Rendu<br />

Si lors de l’étape de rendu<br />

on efface l’écran et on<br />

affiche directement les<br />

différents éléments à<br />

l’écran, alors on observe un<br />

effet de scintillement.<br />

5


Solution : affichage en « double buffer »<br />

On utilise deux buffers d’image. On affiche la scène dans un<br />

buffer en mémoire alors que l’autre buffer est affiché.<br />

Lorsque l’image est construite, on permute les deux buffers.<br />

L’image qui apparaît à l’écran est complète<br />

Pas de scintillement<br />

Affichage<br />

échange<br />

Mémoire Écran Mémoire<br />

Écran<br />

6


affichage en « double buffer » avec OpenGL<br />

// Lors de l’initialisation de l’affichage Glut,on requiert un affichage<br />

// en double buffer.<br />

glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH );<br />

// Méthode appelée par Glut pour l’affichage<br />

GLvoid callback_display()<br />

{<br />

// On efface l’image du buffer en mémoire<br />

glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );<br />

// On affiche la scène dans le buffer en mémoire<br />

affiche_scene();<br />

}<br />

// Permutation des deux buffers. Le buffer en mémoire devient visible.<br />

glutSwapBuffers();<br />

7


Remarque:<br />

Si on utilise un affichage en « double buffer », alors on prend<br />

en mémoire vidéo le double de la mémoire nécessaire pour le<br />

« Color buffer ».<br />

Ex: en 1024x768, 24 bits : taille color buffer = 2.25 Mo<br />

en double buffer : 2.25 x 2 = 4.5 Mo<br />

8


Quelques techniques d’animation :<br />

Interpolation de positions-clés<br />

Motion capture<br />

Utilisation d’expressions mathématiques<br />

Cinématique directe et inverse<br />

Simulation dynamique<br />

9


1. Interpolation de positions clés<br />

Permet à l’utilisateur de ne pas avoir à définir toutes les étapes de<br />

l’animation :<br />

• L’utilisateur définit des positions clés (« key frame »)<br />

• L’ordinateur se charge de calculer les positions intermédiaires<br />

par interpolation des positions clés.<br />

10


Interpolation linéaire<br />

Soit un point P(x,y,z) en mouvement. On veut l’amener de (x 0<br />

,y 0<br />

,z 0<br />

) au<br />

temps t 0<br />

au point (x 1<br />

,y 1<br />

,z 1<br />

) au temps t 1<br />

. On peut utiliser une interpolation<br />

linéaire :<br />

Y<br />

X<br />

P(x 1<br />

,y 1<br />

,z 1<br />

)<br />

P(x,y,z)<br />

Z P(x 0<br />

,y 0<br />

,z 0<br />

)<br />

Si on considère que t 0<br />

=0 et t 1<br />

=1, alors :<br />

X(t) = (1-t).x 0<br />

+ t.x 1<br />

avec t ∈ [0 ,1]<br />

= x 0<br />

+ t.(x 1<br />

-x 0<br />

)<br />

Autres interpolations possibles : bicubique, spline, etc.<br />

11


Exemples<br />

<strong>Animation</strong> de personnages dans les jeux (Quake2, Quake3, etc.)<br />

<strong>Animation</strong> de visage par interpolation entre des expressions clés.<br />

Au repos Joie Peur Colère<br />

12


2. Capture de mouvement<br />

« Motion capture » (MoCap) : on enregistre les mouvements d'un acteur<br />

pour les appliquer ensuite sur un modèle virtuel.<br />

Cette technique est très utilisée dans les films et dans les jeux vidéos.<br />

Plusieurs techniques existent, utilisant ou non des capteurs sur le<br />

corps de l'acteur, et utilisant ou non des caméras.<br />

13


2.1 Utilisation de capteurs<br />

L'acteur porte des capteurs sur le corps, positionnés sur des points de<br />

références (articulations).<br />

L'acteur est filmé sous plusieurs angles de vue par plusieurs caméras<br />

(très rapides. Vicon MX13 : 484 fps).<br />

Un ordinateur analyse les différentes vues pour retrouver la position en<br />

14<br />

3D de tous les capteurs.


Capture d'expressions faciales<br />

“Facial motion capture”<br />

Utilisation de plusieurs dizaines de capteurs disposés sur le visage.<br />

15


2.2 Analyse sans capteur (« markless »)<br />

Le mouvement est analysé par traitement d'image, en filmant un acteur<br />

avec une ou plusieurs caméras, sans utiliser de capteur.<br />

On peut ainsi capturer des mouvements très subtils (ex: mouvements du<br />

visage) qui nécessiteraient beaucoup trop de capteurs.<br />

(société Image Metrics)<br />

16


Kinect (Microsoft)<br />

La caméra Kinect permet d'obtenir des images optiques, mais aussi une<br />

image de profondeur grâce à un faisceau infrarouge. Des algorithmes<br />

dans le SDK Kinect permettent de repérer la présence de jusqu'à 6<br />

personnes, dont 4 joueurs actifs dont le squelette doté de 20<br />

articulations est calculé en temps réel.<br />

17


2.3 Bilan<br />

Avantages<br />

• Les mouvements obtenus par motion capture sont très réalistes.<br />

• L'animation de personnages est obtenue automatiquement, évitant du<br />

travail à un animateur.<br />

Inconvénients<br />

• Le mouvement est figé, prédéterminé<br />

18


3. Expressions mathématiques<br />

La position des objets 3D en mouvement peut être donnée par une<br />

expression mathématique quelconque dépendante du temps :<br />

x = f 1<br />

(t)<br />

y = f 2<br />

(t)<br />

z = f 3<br />

(t)<br />

Courbes paramétriques (paramétrées par le temps t)<br />

(x L<br />

,y L<br />

,z L<br />

)<br />

Ex: Trajectoire circulaire d’une lune autour<br />

d’une planète :<br />

x L<br />

= x P<br />

+ r . cos(2.π.f.t)<br />

y L<br />

= y P<br />

+ r . sin(2.π.f.t)<br />

z L<br />

= z P<br />

(x P<br />

,y P<br />

,z P<br />

)<br />

r<br />

19


<strong>Animation</strong> de vagues<br />

Profil d’une vague<br />

Gerstner (1804): le profil d’une vague est une trochoïde.<br />

Chaque particule de l’eau a un mouvement circulaire de<br />

rayon r autour d’un point fixe (x 0<br />

, z 0<br />

)<br />

x = x 0<br />

+ r.sin(k.x 0<br />

-ω.t)<br />

z = z 0<br />

- r.cos(k.x 0<br />

- ω.t)<br />

z<br />

x<br />

20


Modèle : superposition de plusieurs trochoïdes 2D<br />

z<br />

y<br />

n<br />

∑<br />

i = 1<br />

( k ( x.cosθ<br />

+ y.sinθ<br />

) − . t )<br />

h( x,<br />

y,<br />

t)<br />

= A . trochoide<br />

ω<br />

i<br />

Chaque trochoïde est caractérisée par son<br />

amplitude A i<br />

, sa direction θ i<br />

et sa fréquence ω i<br />

.<br />

Ces paramètres peuvent être déterminés à<br />

partir d'un spectre de vague (ex: Pierson-<br />

Moskowitz)<br />

i<br />

x<br />

i<br />

i<br />

i<br />

21


4. Cinématique directe et inverse<br />

Méthodes très utilisées, notamment pour l’animation de personnages<br />

(Half-Life, Unreal Tournament, Max Payne, etc.)<br />

Permet plus de souplesse d’animation qu’une interpolation entre des<br />

positions clés.<br />

On peut obtenir des positions qui n’étaient pas prédéfinies.<br />

(Ex: un personnage qui tombe au sol ne passera pas au travers d’un<br />

mur mais restera adossé).<br />

22


4.1 Squelette et enveloppe<br />

Squelette<br />

Définit la charpente d’un objet.<br />

On anime l’objet en animant le squelette.<br />

En général, le squelette est définit par un ensemble de chaînes.<br />

Enveloppe<br />

Définit l’extérieur visible de l’objet.<br />

L’enveloppe est déformée par le squelette.<br />

23


4.2 Chaînes<br />

Racine (1)<br />

Point de départ de la chaîne.<br />

Os (2)<br />

Ligne droite qui relie deux joints.<br />

Joint (3)<br />

Point de rotation entre deux os.<br />

Point de contrôle (effector) (4)<br />

Placé au bout de la chaîne,<br />

permet d’invoquer la cinématique<br />

inverse.<br />

1<br />

2<br />

4<br />

3<br />

24


Rigging<br />

Rigging = positionnement du squelette par rapport au modèle 3D<br />

du personnage.<br />

Exemple de rigging en vidéo :<br />

http://dbdaishu.com/design/index.php/3d-lab-rigging/114-3d-mayaanimation-rigging-a-model-part-1<br />

25


4.3 Contrôle d’une chaîne<br />

Cinématique directe (« forward kinematics »)<br />

On spécifie directement l’angle de chaque joint de la chaîne.<br />

Cinématique inverse (« inverse kinematics »)<br />

On spécifie la position du bout de la chaîne (« effector ») et on<br />

calcule automatiquement les angles des joints.<br />

26


Exemple de chaîne<br />

Θ 2<br />

l 1<br />

l 2<br />

X=(x,y)<br />

(0,0)<br />

Θ 1<br />

• (0,0) est la racine<br />

• l 1<br />

et l 2<br />

sont les os<br />

• X est le bout de la chaîne (« effector »)<br />

∀Θ 1<br />

et Θ 2<br />

sont les angles des joints<br />

27


Cinématique directe<br />

Θ 2<br />

l 1<br />

l 2<br />

X=(x,y)<br />

(0,0)<br />

Θ 1<br />

• On spécifie directement Θ 1<br />

et Θ 2<br />

• Ensuite on calcule X<br />

28


Cinématique inverse<br />

Que faire si l’animateur connaît la position du bout de la chaîne X ?<br />

Θ 2<br />

l 1<br />

l 2<br />

X=(x,y)<br />

(0,0)<br />

Θ 1<br />

On va calculer les angles des joints Θ 1<br />

et Θ 2<br />

à partir de X<br />

Cinématique inverse.<br />

29


5. Simulation dynamique<br />

5.1 Principe<br />

Certaines animations seraient trop complexes à régler manuellement.<br />

Utilisation d’une simulation dynamique en utilisant des lois de la<br />

physique.<br />

30


5.2 Systèmes de particules<br />

5.2.1 Présentation<br />

Ensemble d’éléments dont les mouvements sont régis par des lois<br />

physiques (gravité, forces de frottement, collisions, etc.)<br />

Ensemble de particules<br />

dotées de vitesses propres<br />

31


Les système de particules permettent de représenter des objets qui<br />

n’ont pas forme bien définie (pluie, neige, feu, fumée, chute d’eau,<br />

explosion, feu d’artifice, etc.)<br />

Les particules peuvent être représentées par de simples points, des<br />

polygones ou des objets 3D. On utilise souvent des quadrilatères<br />

texturés avec une texture RGBA, orientés face à l’utilisateur<br />

(« billboarding »).<br />

32


5.2.2 Attributs des particules<br />

Chaque particule du système est caractérisée par un ensemble<br />

d’attributs, comme par exemple :<br />

• Position<br />

• Vitesse<br />

• Masse<br />

• Taille<br />

• Couleur<br />

• Transparence<br />

• Durée de vie<br />

• etc.<br />

34


5.2.3 Utilisation<br />

Système dynamique : lorsque les particules sont crées, elles ont un<br />

temps de vie au cours duquel leurs attributs peuvent être modifiés, puis<br />

elles disparaissent.<br />

Création Utilisation Suppression<br />

Temps de vie<br />

Modification des attributs<br />

Gestion d’une particule au cours du temps<br />

35


Gestion d’un ensemble de particules<br />

A chaque nouvelle image de l’animation, on effectue les étapes<br />

suivantes :<br />

1. Génération de nouvelles particules<br />

2. Réglage des attributs des nouvelles particules<br />

3. Les particules en fin de vie sont détruites<br />

4. Les particules restantes sont déplacées et transformées en<br />

fonction de leurs attributs<br />

5. Les particules restantes sont affichées<br />

36


Structures de données<br />

class Particule<br />

{<br />

float x, y, z;<br />

float masse;<br />

int duree_de_vie;<br />

};<br />

class Systeme<br />

{<br />

list liste;<br />

};<br />

37


Calcul de la position au cours du temps<br />

Discrétisation du temps, car affiche un certain nombre d’images par<br />

seconde dt = intervalle de temps écoulé entre deux images.<br />

Calcule la distance parcourue pendant un intervalle de temps dt et<br />

l’ajoute à la dernière position connue.<br />

Schéma d’intégration d’Euler :<br />

P(t+dt) = P(t) + V(t).dt<br />

38


Logiciels<br />

Des logiciels permettent de configurer facilement des systèmes de<br />

particules et de les sauver dans des fichiers à des formats (souvent en<br />

XML) qui peuvent être lus par des moteurs de jeu (XNA, Cocos2D, etc.)<br />

ParticleDesigner<br />

http://particledesigner.71squared.com<br />

39


5.3 Simulations dynamiques avancées<br />

Pour représenter de manière très réaliste certains mouvements de la<br />

réalité (solides, liquides, tissus, etc.), on a besoin d’utiliser des modèles<br />

physiques = des équations qui décrivent ces mouvements au cours du<br />

temps en fonction des forces en jeu, selon les lois de la mécanique (des<br />

solides, des fluides, etc.)<br />

Problème : les temps de calculs sont souvent très élevés.<br />

Solution : faire le moins de calculs possible, approximation des<br />

équations on peut obtenir du temps réel. De telles animation<br />

physiques apparaissent dans les jeux vidéos.<br />

40


5.3.1 Utilisation de la mécanique des solides<br />

Utilisation des lois du mouvement énoncées par Newton :<br />

• principe d’inertie :<br />

S'il n'y a pas de force qui s'exerce sur un corps ou si la somme des forces s'exerçant<br />

sur lui est égale au vecteur nul, la direction et la norme de sa vitesse ne changent<br />

pas (=accélération nulle).<br />

• principe fondamental de la dynamique :<br />

L'accélération subie par un corps dans un référentiel galiléen est proportionnelle à<br />

la résultante des forces qu'il subit, et inversement proportionnelle à sa masse m.<br />

• principe des actions réciproques :<br />

Tout corps A exerçant une force sur un corps B subit une force d'intensité égale, de<br />

même direction mais de sens opposé, exercée par le corps B.<br />

Prise en compte des objets, des relations de jointure entre ces objets,<br />

des forces appliquées aux objets (gravité, collisions, frictions).<br />

<strong>Animation</strong> très réaliste de véhicules, de collision d’objets (billard,<br />

bowling), d’objets articulés (personnage, grue, robot), de cordes, de<br />

cheveux, etc.<br />

41


<strong>Animation</strong> d’objets rigides<br />

42


<strong>Animation</strong> de tissus<br />

Principe: maillage 2D de sommets reliés par<br />

des liaisons plus ou moins élastiques (système<br />

masses-ressorts). Des forces sont appliquées<br />

sur les sommets (gravité, etc.)<br />

43


<strong>Animation</strong> de cheveux<br />

De nombreux modèles ont été proposés par<br />

des chercheurs, cherchant un compromis entre<br />

temps de calcul et réalisme.<br />

Cheveu modélisé par un<br />

système masses-ressorts<br />

Laboratoire GRAVIR, Grenoble<br />

44


Utilisation de la mécanique des fluides<br />

Utilisation des équations de Navier et Stokes, qui décrivent le<br />

comportement de fluides (liquides, gaz) en fonction de leur viscosité, de<br />

la pression, de la température, du temps, des forces en présence.<br />

L’espace qui sera rempli par l’eau est discrétisé en un maillage 3D de<br />

sommets. Au cours du temps, des vecteurs vitesse de fluide sont<br />

calculés en chaque sommet du maillage grâce aux équations de Navier-<br />

Stokes. Des particules de fluide sont placées dans cette matrice 3D.<br />

Leur position est donnée par interpolation des vecteurs vitesse.<br />

Maillage 3D de sommets<br />

45


<strong>Animation</strong> de liquides<br />

http://physbam.stanford.edu/~fedkiw/<br />

46


<strong>Animation</strong> de gaz<br />

http://physbam.stanford.edu/~fedkiw/<br />

47


5.4 API physiques<br />

HAVOK<br />

http://www.havok.com<br />

Utilisé dans plus de 200 jeux sur PC, PS2, PS3,<br />

PSP, Wii, XBOX, XBOX 360.<br />

(Assassin's Creed, Bioshock, Company of Heroes, Fable 2,<br />

Fallout 3, FEAR, Halo 3, Spore…)<br />

NVIDIA PhysX<br />

http://www.nvidia.com/object/physx_new.html<br />

TOKAMAK (Gratuit)<br />

http://www.tokamakphysics.com/<br />

ODE (Open Dynamics Engine) (Gratuit)<br />

http://www.ode.org<br />

BULLET (Gratuit)<br />

http://bulletphysics.org<br />

…<br />

48


Box2D<br />

Moteur physique open source (C++,<br />

Flash, iPhone/iPad, ...) permettant de<br />

simuler la mécanique des solides<br />

rigides en 2D.<br />

http://box2d.org<br />

PhysicsEditor<br />

Angry Birds<br />

49


6. Collisions<br />

Le test de collisions entre des objets dans une scène 3D est<br />

indispensable dans une application 3D interactive (simulateur, jeu, …) :<br />

- Est-ce que l’avion a touché le relief du sol ?<br />

- Est-ce que le personnage est contre le mur du couloir?<br />

- Est-ce que le boulet de canon a touché le bateau ?<br />

- …<br />

50


6.1 Principe<br />

Dans le cadre d’animation d’objets, on est confronté au problème des<br />

collisions entre ces objets.<br />

Détection de collision<br />

Déterminer quand et où deux objets se touchent.<br />

Résolution de collision<br />

Déterminer comment la collision affecte le mouvement des objets.<br />

51


6.2 Détection de collision<br />

Pour détecter si deux objets sont entrés en collision, il faudrait vérifier si<br />

le volume de l’un intersecte celui de l’autre, en testant chacun de leurs<br />

triangles.<br />

Très lourd en temps de calcul.<br />

60000 triangles<br />

5000 triangles<br />

52


Accélération de la détection de collision<br />

Il est nécessaire de mettre en œuvre des stratégies d’accélération de la<br />

détection de collision :<br />

- Partition de l’espace<br />

- Volumes englobant les objets<br />

On utilise souvent les deux simultanément.<br />

53


6.2.1 Partition de l’espace<br />

On divise l’espace de la scène 3D en régions.<br />

On peut accélérer la recherche de collisions entre 2 objets :<br />

si les 2 objets appartiennent à des régions différentes, alors ils ne sont<br />

pas en collision.<br />

54


1) Partition uniforme de l’espace<br />

On divise l’espace de la scène 3D en régions de mêmes tailles.<br />

Problème : certaines régions peuvent contenir des milliers de<br />

polygones, et d’autres très peu voire aucun.<br />

55


2) Partition adaptative en quadtree ou octree<br />

On divise l’espace de la scène 3D en régions de telles manière à ce<br />

qu’elles ne contiennent pas plus de polygones qu’un nombre donné.<br />

56


6.2.2 Volumes englobants<br />

Pour accélérer le test de collision entre 2 objets : test d’intersection entre<br />

leur volumes englobants (sphère, boîte, objet simplifié, etc.)<br />

Beaucoup plus rapide.<br />

Test de collision de deux objets 3D, en testant l’intersection<br />

entre leurs boîtes englobantes<br />

57


1) Sphère englobante<br />

Test de collision très simple :<br />

R 1<br />

R 2 d > R 1<br />

+ R 2<br />

Pas de collision<br />

d<br />

R 1<br />

R 2<br />

d<br />

d < R 1<br />

+ R 2<br />

Collision<br />

Deux sphères entrent en collision si la distance qui sépare leurs<br />

centres est inférieure à la somme de leurs rayons.<br />

58


2) Boîte alignée par rapport aux axes<br />

(AABB : Axis Aligned Bounding Box)<br />

z<br />

x<br />

Des collisions peuvent être détectées à tort.<br />

59


3) Boîte à l’orientation quelconque<br />

(OBB : Oriented Bounding Box)<br />

z<br />

x<br />

Plus précis que AABB, mais plus coûteux à calculer.<br />

60


Algorithmes d’intersections entre différents types de volumes:<br />

http://www.realtimerendering.com/int/<br />

Test de collision entre volumes englobants :<br />

- Très rapide<br />

- Mais approximatif<br />

Améliorations :<br />

Liste de volumes englobants<br />

Hiérarchie de volumes englobants<br />

61


Dans le moteur physique Reactor utilisé par 3D Studio Max, on peut<br />

détecter plus ou moins finement les collisions en utilisant une boîte<br />

englobante, ou un sphère englobante, ou une enveloppe convexe, ou<br />

une enveloppe concave, etc.<br />

Enveloppe englobante<br />

de + en + précise<br />

( temps de calculs<br />

plus élevés)<br />

62


Problème<br />

<strong>Animation</strong> : échantillonnage du temps (x images/sec)<br />

Si les objets se déplacent rapidement, ou si le nombre d’images par<br />

seconde est insuffisant, on risque de manquer une collision.<br />

t 0<br />

t 1<br />

Est ce que la boîte est entrée en collision avec la sphère entre le<br />

temps t 0<br />

et le temps t 1<br />

?<br />

63


7. ODE (Open Dynamics Engine)<br />

http://www.ode.org<br />

Bibliothèque open source de fonctions.<br />

Simulation physique basée sur la mécanique des solides ( objets<br />

rigides, donc pas de tissus, de fluides, etc.)<br />

ODE comporte deux composantes principales :<br />

• Un moteur de simulation dynamique<br />

• Un moteur de détection de collision<br />

64


7.1 Body et Geom<br />

Chaque élément de la scène pouvant être animé physiquement doit être<br />

doté :<br />

• D’un body : propriétés dynamiques (vitesse, masse, etc.)<br />

• D’un geom : propriétés géométriques (enveloppe géométrique<br />

servant à la détection de collision, position, orientation) mais ne<br />

servant pas à l’affichage.<br />

Classes de géométrie possibles pour l’enveloppe géométrique :<br />

• Sphere<br />

• Box<br />

• Plane<br />

• Cylinder<br />

• Ray<br />

• Triangle mesh<br />

65


7.2 Jointures<br />

Différents types de jointures peuvent être défini entre les body de deux<br />

objets afin de d’imposer des contraintes :<br />

Ball and socket Hinge Universal<br />

Slider<br />

Hinge2<br />

66


7.3 Structure typique d’un programme<br />

• Créer un monde dynamique<br />

• Créer des bodies dans le monde dynamique<br />

• Définir l’état de tous les bodies (position, etc.)<br />

• Créer des jointures dans le monde dynamique<br />

• Attacher les jointures aux bodies<br />

• Définir les paramètres des jointures<br />

• Créer un groupe de jointures temporaires pour les points de collision<br />

• Boucle :<br />

• Appliquer des forces sur les bodies si nécessaire<br />

• Ajuster les paramètres des jointures si nécessaire<br />

• Appeler la détection de collision<br />

• Créer une jointure de contact pour chaque point de collision et<br />

l’ajouter au groupe de jointures temporaires<br />

• Faire un pas de simulation<br />

• Supprimer toutes les jointures du groupe temporaire<br />

• Supprimer le monde dynamique<br />

67

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!