2017-12-30 94 views
1

Ich habe an einem Sprite-Renderer gearbeitet, und ich habe Rechtecke, die richtig gerendert werden, aber jetzt möchte ich sie drehen und vielleicht Texturen hinzufügen. Allerdings kann ich beispielsweise den Winkel nicht speichern, ohne die Daten zu duplizieren. Derzeit hat jeder Scheitelpunkt seine Position, und es wäre eine Verschwendung, jeden Winkel, textureatlas_index, etc. viermal für jedes Rechteckmaschenwerk zu wiederholen. Also hier ist die Frage, gibt es eine effiziente Möglichkeit, Variablen wie Winkel oder Texturatlas_Indexes pro Form und nicht pro Vertex zu speichern?OpenGL Speichern von Variablen pro Form ohne Duplikate

Bearbeiten: noch eine Sache, mein Sprite-Renderer hat eine maximale Kapazität, so dass es nicht dynamisch Größe ist, aber ich kann nicht auf diese maximale Kapazität vor der Laufzeit zugreifen, so statische Arrays sind nicht wirklich eine Option.

Ich bin Targeting 3.3 Kern

+0

Welche OpenGL Version zielen Sie bekommen? – derhass

+0

@derhass 3.3 Kern – Whiteclaws

+0

@Whitclaws. Sie können zum Beispiel ein [UBO] (https://www.khronos.org/opengl/wiki/Uniform_Buffer_Object) oder [TBO] (https://www.khronos.org/opengl/wiki/Buffer_Texture) verwenden, um das zu speichern pro-Rechteck-Attribute nur einmal. Wenn Sie eine feste Anzahl von 4 oder 6 Scheitelpunkten pro Rechteck verwenden, können Sie einfach einen Index verwenden, der von 'gl_VertexID/4' oder' gl_VertexID/6' abgeleitet ist, um in Ihre pro-Rechteck-Attribute zu indizieren. Eine andere Option wäre die Verwendung von [Instancing] (https://www.khronos.org/opengl/wiki/Vertex_Rendering#Instancing), aber ich würde das nicht empfehlen, da Perf nicht optimal mit so wenigen Vertices sein wird. – derhass

Antwort

0

ich für einen gestreamten Texturpuffer angesiedelt und gl_VertexId/4 des aktuellen Rechtecks ​​Index