Fogli Sprite con oggetti buffer e shader


9

Qual è il modo "migliore" per gestire i fogli sprite con shader e buffer? Nella modalità immediata è facile modificare i texcoords di uno sprite quando viene disegnato, ma non so come farlo con l'opengl moderno. Devo memorizzare tutti i texcoords in un buffer e cambiare il puntatore per ogni sprite, o c'è un modo migliore?

Risposte:


11

È sempre possibile ripetere il looong buffer "vertice; texcoord". E usa gli indici come hai detto. È probabilmente il più semplice e un po 'simile a quello che sai.

Se vuoi risparmiare un po 'di memoria. C'è una soluzione piuttosto accurata ed è avere uno sprite in buffer con unire texcoords e creare una matrice di trasformazione UV e inviarlo al tuo shader e moltiplicare texcoords con esso (in vertex shader).

Non devi creare matrici da solo se non ti va bene. Puoi semplicemente usare le normali funzioni GL e leggere la matrice con la glGetFloatvfunzione. Come questo:

glGetFloatv (GL_MODELVIEW_MATRIX ,&g_TexCoordMat);

Ho creato l'immagine per descriverla meglio. glTranslate ang glScale può essere visto che si stanno muovendo semplicemente con la base dello spazio UV.

spritesheet uvs

Se non sai come inviare la matrice a Shader, posso condividere un po 'di codice con te.

Modifica: aggiunta foto
(fonte per spritesheet che ho usato: funorb.com )


Wow grazie! Risposta perfetta Mi piace molto questa soluzione e la esaminerò non appena torno dal lavoro. :-) Se rimango bloccato, ti darò fastidio con qualche altra domanda.
uggwar

Questo, per quanto posso vedere, genererà un richiamo per ogni sprite. C'è un modo per raggruppare questi sprite per un'implementazione più fluida?
uggwar

@uggwar Disegno istanziato?
Notabene,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.