2017-04-25 5 views
1

Ich versuche, eine Zeichenfolge in OpenGL mit LWJGL aus einem Texturatlas mit allen Zeichen nebeneinander zu zeichnen.Quad-Zeichnung mit GL_TRIANGLE_STRIP

nun für jedes Zeichen Ich füge drei Eckpunkte auf das Netz, die ich bin ermüdet, um durch

GL11.glDrawArrays(GL11.GL_TRIANGLE_STRIP, 0, text.getModel().getRawModel().getVertexCount()); 

Zum Beispiel gemacht werden werden die Zeichenfolge „Thomas“ zu machen, dass bis Ende der als die folgenden (mit Offset hinzugefügt, um das Problem besser zu sehen):

Render of Thomas

Wie Sie sehen können, gibt es einen seltsamen „Quad“ zwischen jedem Zeichen, und ich weiß nicht, warum :-( ich denke, das ich zu vielen Eckpunkten hinzufüge pro Zeichen, aber ich erhielt keine Ahnung, es besser zu machen ...

Vertices (2D):

-0.3333333, 0.5875, 
-0.24800003, 0.5875, 
-0.3333333, 0.25, 
-0.24800003, 0.25, 

-0.11466664, 0.5875, 
-0.029333353, 0.5875, 
-0.11466664, 0.25, 
-0.029333353, 0.25, 

0.10399997, 0.5875, 
0.18933332, 0.5875, 
0.10399997, 0.25, 
0.18933332, 0.25, 

0.32266665, 0.5875, 
0.408, 0.5875, 
0.32266665, 0.25, 
0.408, 0.25, 

0.5413333, 0.5875, 
0.62666667, 0.5875, 
0.5413333, 0.25, 
0.62666667, 0.25, 

0.76, 0.5875, 
0.84533334, 0.5875, 
0.76, 0.25, 
0.84533334, 0.25, 

Texture Coords (2D):

0.23318386, 1.0, 
0.23766816, 1.0, 
0.23318386, 0.0, 
0.23766816, 0.0, 

0.32286996, 1.0, 
0.32735425, 1.0, 
0.32286996, 0.0, 
0.32735425, 0.0, 

0.3542601, 1.0, 
0.35874438, 1.0, 
0.3542601, 0.0, 
0.35874438, 0.0, 

0.34529147, 1.0, 
0.3497758, 1.0, 
0.34529147, 0.0, 
0.3497758, 0.0, 

0.29147983, 1.0, 
0.29596412, 1.0, 
0.29147983, 0.0, 
0.29596412, 0.0, 

0.3721973, 1.0, 
0.37668163, 1.0, 
0.3721973, 0.0, 
0.37668163, 0.0 
+0

Was ist das Indexarray? – rwols

+0

@rwols Es gibt kein Index-Array, weil ich dachte, dass ich keinen Eckpunkt zweimal verwenden werde. Nur die Eckpunkte und Texturkoordinaten sind im VAO gespeichert. –

+0

Dann wird 'GL_TRIANGLE_STRIP' wahrscheinlich nicht funktionieren – rwols

Antwort

1

auf der Suche, wie Sie angelegt Ihre Eckpunkte, es sieht aus wie GL_TRIANGLE_STRIP wird nicht funktionieren. Lassen Sie uns Ihre Eckpunkte mit den Zahlen beschriften 0 bis 24 wird die Dreiecksstreifen Topologie Dreiecke wie folgt zeichnen:

draw triangle 0 1 2 
draw triangle 1 2 3 
draw triangle 2 3 4 
... 
draw triangle 20 21 22 
draw triangle 21 22 23 

Was möchten Sie wahrscheinlich ist dies:

draw triangle 0 1 2 
draw triangle 1 2 3 

draw triangle 4 5 6 
draw triangle 5 6 7 

draw triangle 8 9 10 
draw triangle 9 10 11 

... 
... 

draw triangle 20 21 22 
draw triangle 21 22 23 

Dies kann mit der GL_TRIANGLES Topologie erreicht werden und unter Verwendung eines Indizes wie diese Puffer:

[ 0 1 2 1 2 3 4 5 6 5 6 7 ... 20 21 22 21 22 23 ] 
+1

Vielen Dank! Das ist es :-) –

0

Wenn Sie disjoint primatives mit TRIANGLE_STRIP machen möchten, müssen Sie schließe degenerierte (Nullflächen-) Dreiecke zwischen deinen disjunkten Prims ein. Sie können dies tun, indem sie die Eckpunkte zu wiederholen Sie disjoint machen wollen:

-0.3333333, 0.5875, 
-0.24800003, 0.5875, 
-0.3333333, 0.25, // real triangle 
-0.24800003, 0.25, // real triangle 
-0.24800003, 0.25, // ignored degenerate triangle 

-0.11466664, 0.5875, // ignored degenerate triangle 
-0.11466664, 0.5875, // ignored degenerate triangle 
-0.029333353, 0.5875, // ignored degenerate triangle 
-0.11466664, 0.25, // real triangle 
-0.029333353, 0.25, // real triangle 
-0.029333353, 0.25, // ignored degenerate triangle 
... 

Degenrate Prims optimiert sind weg gut genug, dass man sie vernachlässigen kann.

Beachten Sie jedoch, dass das im Grunde keinen Vorteil für das Rendern von disjunkten Quads hat, da Sie nur zwei Vertices insgesamt nur über TRIANGLES speichern, unabhängig von der Anzahl der Quads.

Diese Technik ist sinnvoller, wenn disjunkte "Sprünge" weniger häufig sind, wie z. B. für Tri-Strip-optimierte Netze.

Verwandte Themen