ok :ccool:
à priori tu es sur la bonne voie, mais je te conseille de te renseigner plus avant sur les différents types d'animations dans les applications 3D;Citation:
Apparemment on perd un peu l'initiative d'avoir mis ça dans la RAM du GPU puisqu'il faut de nouveau renvoyer les données (toutes ?). Par contre, si on peut renvoyer que les points qui ont bougés, ce serait le plus optimal, mais j'en doute. Donc, j'ai pensé à séparer les parties d'un mesh (pour l'exemple d'un bonhomme: tête, bras, corps, jambes, pieds) dans des DisplayList/VBO différents, ce qui permettrais de ne pas avoir à mettre à jour (ou peu). Tout cela dépend bien sûr du nombre de listes maximale autorisé, si c'est limité.
en gros il existe deux catégories :
l'animation par Keyframes, c'est à dire une collection de mesh correspondant aux poses de l'objet qui se succèdent durant une période prédéfinie; pour produire l'impression de mouvements on les affiche les unes après les autres en interpolant les positions
comme tu peux t'en douter c'est un procédé qui demande énormément de mémoire (minimum 24 meshes pour une animation !) et n'a aucune flexibilité par rapport à l'environnement
à côté on l'animation squelettale, qui s'inspire de l'ossature des vertébrés : l'objet est constitué d'articulation (par ex coude, épaule) qui effectuent des rotations et translations dans l'espace; leur sont attachés des mesh qui effectuent les mêmes transformations (un peu comme nos membres); de plus ils appartiennent à une hiérarchie, cad que la transformation d'un nœud parent se répercute sur ses enfants, les enfants de ces enfants et ainsi de suite, comme dans un arbre. Cela permet de transformer le noeud racine et sa descendance de manière récursive et simplement
pour animer le tout on utilise des Keyframes (à ne pas confondre avec celles évoquées plus haut) qui sont en fait des matrices de transformation que l'on va appliquer aux matrices des jointures puis on interpole les différentes matrices ainsi produites
comparé au premier procédé, c'est beaucoup plus logique, souple et économe en mémoire; tu peux intégrer ton squelette dans un moteur physique, lui appliquer des contraintes, gérer les collisions, etc...le seul inconvénient ce sont les calculs supplémentaires dus à la multiplication des matrices entre elles, un coût que tu peux facilement amortir en les faisant effectuer par les shaders
pour en savoir plus, tu peux t'adresser à l'ami google avec les mots clés suivants : animation squelletale, skinning mesh et consulter cet article http://www.runes-mmorpg.com/index.ph...en-opengl.html qui m'a bien aidé :D
pour envoyer des données aux shaders tu peux passer soit par les attributs de vertex (position, couleur, coordonnées de texture...) que tu mets à jour via les VBO, soit passer des constantes à chaque frame (nommées uniform en OpenGLCitation:
Un peu loin effectivement, mais j'ai déjà jeté un œil aux shaders de lumière pour me projeter dans les possibilités. Donc envoyer à l'aide d'une propriété par glColor3fv (si me souviens bien) les nouvelles positions, comme ça le shader peut mettre à jour sa mémoire, pour autant que la VBO soit atteignable dans le shader (uniform ou un truc du style ?). Là je ne fais que deviner, est-ce que je vois juste ?
le langage de shader pour OpenGL est le GLSL
j'espère t'avoir quelque peu éclairé sur les différentes possibilités qui s'offrent à toi 8-)Citation:
C'est pas grave, c'était pour donner un exemple de mesh dont différentes parties peuvent être animées indépendamment. Ce qui sera aussi le cas dans mon jeu, pour la plupart des animations. Merci !