Feuilles de sprite avec objets tampons et shaders


9

Quelle est la "meilleure" façon de gérer les feuilles de sprite avec des shaders et des tampons? En mode immédiat, il est facile de modifier les texcoords d'un sprite quand il est dessiné, mais je ne sais pas comment faire avec opengl moderne. Dois-je stocker tous les texcoords dans un tampon et changer le pointeur pour chaque sprite, ou existe-t-il une meilleure façon?

Réponses:


11

Vous pouvez toujours faire répéter looong buffer "vertex; texcoord". Et utilisez simplement des indices comme vous l'avez dit. C'est probablement le plus facile et un peu similaire à ce que vous savez.

Si vous souhaitez économiser de la mémoire. Il y a une solution assez soignée et c'est d'avoir un sprite dans le tampon avec unir texcoords et créer une matrice de transformation UVs et l'envoyer à votre shader et multiplier texcoords avec lui (dans vertex shader).

Vous n'avez pas besoin de créer des matrices par vous-même si cela ne vous convient pas. Vous pouvez simplement utiliser des fonctions GL régulières et lire la matrice avec glGetFloatvfonction. Comme ça:

glGetFloatv (GL_MODELVIEW_MATRIX ,&g_TexCoordMat);

J'ai créé une image pour mieux la décrire. glTranslate ang glScale peut être considéré comme se déplaçant simplement avec la base de l'espace UV.

spritesheet uvs

Si vous ne savez pas comment envoyer la matrice au shader, je peux partager du code avec vous.

Edit: Ajout d'une image
(source de la feuille de calcul que j'ai utilisée: funorb.com )


Ouah merci! Réponse parfaite. J'aime vraiment cette solution et j'y réfléchirai dès que je serai de retour du travail. :-) Si je suis coincé, je vais vous déranger avec d'autres questions.
uggwar

Autant que je sache, cela générera un appel de tirage pour chaque image-objet. Existe-t-il un moyen de regrouper ces sprites pour une implémentation plus fluide?
Uggwar

@uggwar Dessin instancié?
Notabene
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.