M2 Image

TP2 - animations
et déformations




exercice 1 :

chargez 2 keyframes d'une animation : robot (quaternius)

on suppose que la première keyframe correspond au temps t= 0 et la 2ième au temps t= 1.
comment interpoler (linéairement) la position de chaque sommet en fonction du temps t, connaissant sa position à t= 0 et à t= 1 ? (pour l'instant, on suppose que t est compris entre 0 et 1)
utilisez float global_time() de window.h pour connaitre le temps écoulé depuis le lancement de l'application, en millisecondes.

écrivez le vertex shader qui réalise cette interpolation.
quelles informations sont nécessaires pour l'exécuter ?
comment les fournir au shader ? comment les récupérer dans l'application ?

rappel : buffers, vertex array objects, uniforms, Mesh::positions(), Mesh::indices(), read_mesh(), read_indexed_mesh()...

astuces : il y a 2 manières de représenter les maillages, soit avec des sommets partagés / indexés, soit uniquement avec les sommets. quel serait l’intérêt d'utiliser un maillage indexé avec des sommets partagés dans ce cas ?

bug : il y a un problème avec la reconstruction de l'indexation des sommets entre les différents mesh du robot. utilisez plutot read_mesh() et une représentation sans sommets partagés.
le problème vient des fichiers .obj qui ne contiennent pas le même nombre de normales uniques, et donc pas le même nombre de sommets partagés...

rappel : il existe plusieurs manières de configurer des vao... cf la doc en ligne ?
rappel : il existe des buffers, cf uniform buffers pour openGL 3.3 ou storage buffers pour openGL 4.3
rappel : oui bien sur, il y a plusieurs solutions...


exercice 2 :
modifiez votre application pour afficher l'animation complète du robot.
chargez toutes les keyframes de l'animation et affichez les, en boucle.

comment décrire / organiser toutes ces informations ? un vao par keyframe ? ou autre chose ?


exercice 3 / bonus :
et si on veut afficher un groupe de robots dont les animations ne sont pas identiques ? (chaque robot ne pose pas le pied en même temps que les autres)


pour les curieux : comment exporter les animations des personnages, ou des animaux de cube_world de quaternius ?