Ich benutze OpenGL ES 2.0. Ich habe ein paar Quads zu zeichnen, würde gerne nur 4 Eckpunkte pro Quad übergeben müssen, als würde ich GL_QUADS verwenden, aber im Grunde möchte ich nur wissen, wie man a am besten zeichnet Haufen von separaten Quads.
Bisher konnte ich Folgendes tun: -GL_TRIANGLES (6 Eckpunkte pro Quad) -Degenerate GL_TRIANGLE_STRIP (6 Eckpunkte pro Quad)
Möglichkeiten, die ich gefunden habe: -GL_TRIANGLE_STRIPS mit einem speziellen Indexwert, der den Quad-Strip zurücksetzt (dies würde 5 Indizes pro Quad bedeuten, aber ich denke nicht, dass dies möglich ist, ist OpenGL ES 2.0)
3, 4,
4, 5, 6, 7}. Die entarteten Dreiecke sind3,3,4
und3,4,4
. Lohnt es sich das zu tun? Nein, es sei denn, Ihre Quads kommen in der Regel paarweise (oder mehr) mit gemeinsamen Kanten. Wenn das 2. Quad {3, 2, 4, 5} ist, ist Strip{0,1,3,2,5,4}
.{0,1,2, 0,2,3, 4,5,6, 4,6,7}
oder gleich gut sind{0,1,2, 2,3,0, 4,5,6, 6,7,4}
. Gute Klasse dabei zu helfen ist glText-Android / SpritebatchIndex - Puffer zu verwenden ist nicht unbedingt schneller, wie in der Apple - Dokumentation angegeben, „Für die beste Leistung, Ihre Modelle sollten als ein einzigen unindexed Dreiecksstreifen vorgelegt werden mit glDrawArrays“ .
So, während ein
GL_TRIANGLE_STRIP
in vier Ecken tun , ohne einen Indexpuffer benötigt, und Sie können einen Index - Puffer verwenden, ist es ziemlich lahm zu „retten“ zu wiederholen , um zu versuchen 2 Ecken . Aus diesem Grund würde ich vorschlagen, dass Sie 2 separate Punkte zeichnenGL_TRIANGLES
und die 2 Eckpunkte auf der Diagonale wiederholen .quelle
Der große Vorteil des Desktops besteht darin, die Daten in GL_STATIC_DRAW-VBOs zu verschieben. Vermutlich trifft dies auch auf die MBX-GPU des iPhones zu.
quelle
Bei Verwendung
GL_TRIANGLE_FAN
für ein Quad werden 4 Scheitelpunkte verwendet, nicht 6.quelle
GL_TRIANGLE_STRIP
, wie andere Antworten bereits gezeigt haben.