Sprite-Blätter mit Pufferobjekten und Shadern

9

Was ist der "beste" Weg, um Sprite-Blätter mit Shadern und Puffern zu handhaben? Im Sofortmodus ist es einfach, die Texcoords eines Sprites beim Zeichnen zu ändern, aber ich weiß nicht, wie ich das mit modernem OpenGL machen soll. Sollte ich alle Texcoords in einem Puffer speichern und den Zeiger für jedes Sprite ändern, oder gibt es einen besseren Weg?

uggwar
quelle

Antworten:

11

Sie können immer einen langen Puffer "Vertex; Texcoord" wiederholen lassen. Und verwenden Sie einfach Indizes, wie Sie gesagt haben. Es ist wahrscheinlich am einfachsten und ähnelt dem, was Sie wissen.

Wenn Sie etwas Speicherplatz sparen möchten. Es gibt eine ziemlich nette Lösung, und es ist, ein Sprite im Puffer mit vereinigten Texcoords zu haben und eine UVs-Transformationsmatrix zu erstellen und es an Ihren Shader zu senden und Texcoords damit zu multiplizieren (im Vertex-Shader).

Sie müssen keine Matrizen selbst erstellen, wenn Sie damit nicht einverstanden sind. Sie können einfach reguläre GL-Funktionen verwenden und dann die Matrix mit der glGetFloatvFunktion lesen . So was:

glGetFloatv (GL_MODELVIEW_MATRIX ,&g_TexCoordMat);

Ich habe ein Bild erstellt, um es besser zu beschreiben. glTranslate ang glScale kann so angesehen werden, dass sie sich nur mit der UV-Raumbasis bewegen.

spritesheet uvs

Wenn Sie nicht wissen, wie man eine Matrix an den Shader sendet, kann ich Ihnen Code mitteilen.

Bearbeiten: Bild hinzugefügt
(Quelle für Spritesheet, das ich verwendet habe: funorb.com )

Notabene
quelle
Wow, danke! Perfekte Antwort. Ich mag diese Lösung sehr und werde sie prüfen, sobald ich von der Arbeit zurück bin. :-) Wenn ich nicht weiterkomme, werde ich dich mit weiteren Fragen belästigen.
Uggwar
Dies wird, soweit ich sehen kann, einen Draw Call für jedes Sprite generieren. Gibt es eine Möglichkeit, diese Sprites für eine reibungslosere Implementierung zu stapeln?
Uggwar
@uggwar Instanzierte Zeichnung?
Notabene