Je suis novice en OpenGL moderne. Je suis à l'aise avec la méthodologie OpenGL immédiate, mais je n'ai jamais utilisé sérieusement les VBO. Ma question concerne l'animation. En mode immédiat, pour réaliser une animation, il vous suffit de diffuser différentes positions de sommets (interpolées à partir d'images clés) dans l'espace objet.
Comment cela est-il réalisé dans OpenGL non immédiat? De toute évidence, le téléchargement de données VBO fraîches pour chaque image va certainement monopoliser le bus graphique. Je n'ai trouvé aucune littérature sur la manière moderne de le faire. En y réfléchissant, je suis arrivé à plusieurs options:
- Attributs: animation comme offset 3D. Pour chaque image, un attribut de décalage différent (éventuellement interpolé) est transmis pour chaque sommet, appliqué au même sommet pour chaque image clé.
- Indices: stocker des images clés en tant que sommets absolus et y accéder par indexation, en utilisant un ensemble différent de sommets pour chaque image clé Je trouve cette approche impossible, car vous ne pouvez pas accéder aux images clés adjacentes et ne pouvez donc pas interpoler entre elles. Cela semble également être une mauvaise idée pour l'animation procédurale.
- Texture: cela peut être très extensible mais sonne comme une bonne solution pour moi. Encore une fois, l'animation est considérée comme un décalage xyz pour chaque sommet. Chaque image clé peut être stockée dans une texture 1D où la dimension correspond à vertexID.Si je ne me trompe pas, dans OpenGL 4.0, vous pouvez accéder aux textures de n'importe quel shader, vous pouvez donc lire cette texture à partir du vertex shader et appliquer chaque transformation de vertex. Une texture 2D peut contenir plusieurs images. Vous effectuez toujours une interpolation (et si l'interpolation fonctionne pour les textures en dehors du fragment shader, dont je ne suis pas sûr, vous pouvez interpoler linéairement gratuitement!) Cela pourrait être appliqué à des systèmes d'animation plus complexes comme l'animation osseuse sans trop d'effort.
Suis-je trop réfléchir à cela? Quelqu'un peut-il nous éclairer?