[OpenGL] Animation et OpenGL

Le côté programmation du développement d'un jeu vidéo.

Animation et OpenGL

Messagepar deathangel » 16 Juin 2008, 09:55

Salut

depuis un petit moment, je me pose une question sur l'animation d'objets et les performances.
Un objet 3D est un ensemble de sommets et triangles qu'il faut filer à la carte graphique. Si l'objet ne se modifie pas, suffit de faire une calllist openGL ou des VertexArray ou des VBO, pour avoir de bonnes performances. Jusque là, pas de problème.
Mais dans le cas d'un objet animé / déformable, il faudrait recréer la liste de coordonnées à chaque fois pour l'envoyer à la carte graphique ? ou y a-t-il une autre méthode plus rapide ?

merci de m'éclairer
95% des problèmes informatiques se situent entre la chaise et le clavier
--> Créez votre robot chien : http://doggyproject.free.fr/
--> Gagnez des PACK+ gratuitement : http://www.packbarre.com/
--> S.U.S Tennis de table http://www.sus.asso.fr
Avatar de l’utilisateur
deathangel
Hello World, I'm new !
 
Messages: 963
Inscription: 10 Avr 2005, 08:50
Localisation: Strasbourg

Messagepar Algex » 16 Juin 2008, 10:38

Salut

Dans le cas d'un VBO, il suffit que tu utilise la fonction glMapBuffer en mode écriture seule (GL_WRITE_ONLY) pour récupérer ton buffer et tu change les données que tu veux. Quand tu a fini, tu fait glUnmapBuffer et c'est bon.
Je te donne un exemple :

Code: Tout sélectionner
float *NewPos = NULL; // Mes nouvelles positions
float *PosVBO = NULL;

// Ici tu rempli ton tableau de nouvelle positions

glBindBuffer(GL_ARRAY_BUFFER, Buffer);

// Ici on récupère les positions contenues dans ton buffer
PosVBO = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);

if(!PosVBO)
     // Il existe pas ou en tout cas tu ne peux pas y accéder.

// Je copie mes nouvelles données
memcpy(PosVBO, NewPos, TaillePriseParLesVertices);

glUnmapBuffer(GL_ARRAY_BUFFER); // Fini !

Algex
Hello World, I'm new !
 
Messages: 19
Inscription: 28 Juin 2007, 14:18

Messagepar deathangel » 16 Juin 2008, 10:59

oki, je vais jeter un oeil la dessus, merci !
95% des problèmes informatiques se situent entre la chaise et le clavier
--> Créez votre robot chien : http://doggyproject.free.fr/
--> Gagnez des PACK+ gratuitement : http://www.packbarre.com/
--> S.U.S Tennis de table http://www.sus.asso.fr
Avatar de l’utilisateur
deathangel
Hello World, I'm new !
 
Messages: 963
Inscription: 10 Avr 2005, 08:50
Localisation: Strasbourg

Messagepar Loulou » 16 Juin 2008, 11:01

De manière générale, les drivers 3D ont effectivement des fonctions permettant de mettre à jour de la géometrie à chaque frame sans trop de perte de performances.

Ceci-dit, une meilleure technique est, lorsque c'est possible, d'utiliser un vertex shader. Ainsi tu peux laisser ta géométrie en mémoire vidéo et économiser en bande passante, en coût CPU et en parallélisme.

Dans les cas que tu cites (animation, déformation), les shaders sont utilisables sans problème.
Loulou
Hello World, I'm new !
 
Messages: 702
Inscription: 10 Avr 2005, 12:00

Messagepar Thelvyn » 16 Juin 2008, 11:23

Ah ! je profite de ce topic pour d'autres questions sur l'anim.

il y a quelques temps j'ai fait quelques tests et j'ai fait une anim vectorielle 2D inspirée du format md5.

Ma première approche était d'utiliser des gl(push|pop)matrix je me suis rendu compte que le model que j'ai fait ( un genre d'octopus en 2d :p ) ramait pendant l'anim sur mon pc portable.

Ensuite j'ai refait la chose en calculant la position des vertex via le CPU et la ça ramait pas dutout...

La question est donc comment faire les calculs d'animation efficaces ?
CoDito, ergo sum...
Avatar de l’utilisateur
Thelvyn
 
Messages: 488
Inscription: 31 Mai 2005, 20:40

Messagepar Loulou » 17 Juin 2008, 03:31

Il y a des tutos sur le sujet.

En gros, habituellement on stocke un squelette et on lui applique à chaque frame d'animation une translation et une rotation. Ca se fait encore mieux dans un shader.
Loulou
Hello World, I'm new !
 
Messages: 702
Inscription: 10 Avr 2005, 12:00

Messagepar CodyX » 18 Juin 2008, 00:25

Tu maitrise l'animation skeletale Thelvin ?
Avatar de l’utilisateur
CodyX
Hello World, I'm new !
 
Messages: 526
Inscription: 10 Avr 2005, 02:52

Messagepar Thelvyn » 18 Juin 2008, 11:08

Ben, l'idée c'était de faire une anime 2D à base de squelette
Maîtriser c'est un grand mot, j'allais plutôt à tâtons :p

d'abord j'ai fait un truc avec remplissage des joints simple
conclusion => gl(push|pop)matrix c'est pas une bonne idée :00000012: , le model que j'ai fait ( procédural ) comportait une vingtaine d'os et j'avais des problèmes de performances ( qu'on voyait bien avec plusieurs models à l'écran )

ensuite j'ai refait la chose avec le calcul de l'interpolation des vertex avec le cpu et la les perfs étaient meilleures

au final j'avais commencé un type d'anim (cpu) où les vertex étaient pondérés par des coefficients par rapport à des joints, le résultat n'était pas mauvais mais très casse gueule pour faire le model à la main...

voila :00000012:

PS. si vous avez de bons liens sur les anim squelettique je suis preneur, sinon je viens d'avoir l'idée de regarder l'anim dans ogre3d :p
CoDito, ergo sum...
Avatar de l’utilisateur
Thelvyn
 
Messages: 488
Inscription: 31 Mai 2005, 20:40

Messagepar CodyX » 19 Juin 2008, 00:51

Thelvyn a écrit:le model que j'ai fait ( procédural ) comportait une vingtaine d'os et j'avais des problèmes de performances ( qu'on voyait bien avec plusieurs models à l'écran )


:00000021: :00000013: :00000009: :00000006:
Un modèle procédural !!!? Mais tu es l'indiana Jones de l'informatique !


Thelvyn a écrit:ensuite j'ai refait la chose avec le calcul de l'interpolation des vertex avec le cpu et la les perfs étaient meilleures

au final j'avais commencé un type d'anim (cpu) où les vertex étaient pondérés par des coefficients par rapport à des joints, le résultat n'était pas mauvais mais très casse gueule pour faire le model à la main...

voila :00000012:

PS. si vous avez de bons liens sur les anim squelettique je suis preneur, sinon je viens d'avoir l'idée de regarder l'anim dans ogre3d :p


Il y a pleins de loaders/viewers sur le net pour md5, mdl ou ms3d...
Perso j'utilise le format de milkshape il est simple et je l'ai même bidouillé pour
avoir plusieurs séquences d'anim.
Si cela t'intéresse je peux te filer du code et uelques explications, mais pas
trop faut pas abuser ! :D
Avatar de l’utilisateur
CodyX
Hello World, I'm new !
 
Messages: 526
Inscription: 10 Avr 2005, 02:52


Retourner vers Programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Google [Bot] et 2 invités

cron