====== La balle ====== En animation par images clé on définit la valeur de différents attributs à des temps donnés, et l'on peut potentielement modeler le comportement de cette évolution entre les clés. On définit par avance l'évolution de valeurs dans le temps, afin de modeler ou mimer un mouvement. A la lecture de l'animation, le logiciel -qu'il s'agisse d'un logiciel de création 3D ou d'un moteur de jeu vidéo- assigne à chaque instant les valeurs demandées, et reproduit le mouvement demandé. [{{ .:balle:courbes.png?nolink |Une courbe d'animation comprenant six clés (Blender). Cette courbe représente l'évolution d'une valeur au fil du temps, par exemple la position verticale d'une balle qui rebondis.}}] En animation procédurale, on définit les **conditions initiales**, par exemple en plaçant des objets dans l'espace et en définissant leurs propriétés physiques, et on définit les **règles** de la simulation, par exemple en ajoutant des forces ou des conditions. A aucun moment on ne modèle directement l'évolution des valeurs dans le temps, mais on prépare le système en prévoyant son évolution future. A la lecture de l'animation, le logiciel modifie à chaque instant les valeurs en appliquant à l'état courant les effets du système. [{{ .:balle:simulation.png?nolink |Mise en place d'une simulation sous Blender.}}] Dans l'illustration ci-dessus, les conditions initiales sont : - Il existe un objet sphérique à une certaine position, ayant une vitesse nulle et certaines propriétés physiques. - Il existe un objet plat au dessous, ayant une vitesse nulle et certaines propriétés physiques. Les règles sont : - La sphère est rigide et peut se déplacer. - Le cube est rigide et ne peut pas se déplacer. - Une force de gravité affecte les objets. - Si deux éléments rigides se rencontrent il y a collision et force de réaction. Lorsqu'on lance la simulation, bien qu'il n'y ait aucune clé, la sphère chute et rebondis sur le cube. Pour comprendre comment ça fonctionne, on va programmer l'animation dynamique de notre balle nous même, en partant de zéro. Même pas peur. ---- * [[.:balle:1-conditions]] : La naissance de la balle. Position et vitesse, tout en vecteurs. * [[.:balle:2-mouvement]] : On opère sur les vecteurs, et la balle bouge. On combine des forces, et la balle tombe ! * [[.:balle:sol]] : On rajoute un sol. Rebond, force de réaction et friction. ---- <WRAP center info> Tous les concepts et mécanismes que l'on va décrire peuvent être traduits dans n'importe quel langage de programmation, avec seulement de légères variantes de syntaxes. Il ne s'agit finalement que de manipuler des nombres, et de se servir ensuite de ces nombres pour créer et manipuler des représentations graphiques. On pourrait donc même faire les calculs à la main, lentement, avec un papier et un crayon. Mais ce serait beaucoup moins rigolo. Pour une question de simplicité du langage, d'accessibilité de l'aspect graphique et de son interactivité, les exemples sont donnés en [[http://paperjs.org|Paper.js]], une librairie graphique en Javascript avec une syntaxe simplifiée, le PaperScript. </WRAP>