2010-11-14 26 views
2

Je suis dans une situation.Performance d'animation squelette OpenGL

Vous voyez, lors du rendu de mon modèle avec ma fonction renderMesh(), le jeu était à environ 30fps. Lors du rendu à une liste d'affichage, et en cours d'exécution, le fps est allé à environ 450fps. C'est un gain de 1500%. J'ai été ravi par cela, car cela signifiait que OpenGL n'était pas la cause du décalage, c'était la fonction, et cela peut être optimisé.

Mais maintenant je veux rendre un mesh skinned, donc je vais devoir mettre à jour les positions de vertex par frame, mais rien d'autre. Donc ce serait une perte de temps de faire renderMesh() parce que le surcoût de patcher tous les visages, ect ... est inutile. Je veux mettre en cache ces données, mais les listes d'affichage ne fonctionneront pas en raison des coeurs de vertex volatils.

Quelle serait la meilleure solution (autre que d'optimiser mon renderMesh(), ce que je ferai de toute façon).

+0

Il est un peu difficile de suggérer des améliorations lorsque nous ne voyons pas de code réel. Si vous faites un skinning simple, vous pouvez même écrire un shader GLSL pour qu'il fasse le travail. – Bart

Répondre

3

Vous pouvez utiliser VBOs et obtenir des améliorations. Devrait être identique ou mieux que les listes. 1500% d'amélioration est étrange. Etes-vous sûr de bien mesurer les FPS?

+1

Oui, je mesure en fonction des ticks du processeur, rien de plus précis. –

+0

vbos semble idéal, merci. –

5

Je ne peux que suggérer:

  1. En utilisant moins de sommets
  2. Déplacement de votre sommets (ou la plupart d'entre eux) dans des groupes rigides --- cette façon chaque groupe peut être une liste
  3. Vertex Buffer Objects