Chaque articulation définit un changement de repère, il
est possible de bouger un orteil sans bouger le reste de la jambe, mais
il est également possible de modifier l'orientation de la cuisse
(LeftUpLeg par exemple) et de modifier la position des orteils en
fonction.
Chaque articulation (ou joint) est positionnée et
orientée dans le repère précédent de la
hiérarchie : LeftUpLeg est positionnée par rapport
à Hips, LeftLowLeg par rapport LeftUpLeg (et donc indirectement
par Hips), etc.
Toutes ces données sont stockées dans un fichier .bvh, vous pouvez utiliser libbvh pour charger, extraire les informations puis afficher une pose complète du squelette, puis son animation.
Les informations nécessaires (translation et orientation) s'obtiennent ainsi :
translation : joint_get_offset() + joint_get_position(),
les translations sont décomposées en deux parties, une
rigide (offset), et une autre animée (position), il faudra donc
les composer.
orientation : joint_get_orientation(valeurs[3],
axes[3]), les orientations sont données dans un ordre
précis (angles d'euler), il faudra le respecter lors de la
composition.
Q1: installez libbvh et téléchargez un fichier d'exemple walk.bvh. Chargez une animation, et récupérez les informations pour afficher la première image de l'animation.
Q2: affichez une image de l'animation.
Q3: définissez une caméra, comment
déplacer interactivement le point de vue et l'orientation de la
caméra ?
Partie 2 : animation
Q1. affichez toutes les images de l'animation.
Partie subsidiaire :
Q1. utilisez openGL directement pour réaliser tous les affichages.
Q2. habillez votre squelette. Commencez par remplacer les segments par des 'cubes' allongés.