2016-07-30 33 views
1

Wenn ich ein rotes und blaues Quadrat mit Dreiecken ohne mehrere Zeichenaufrufe zeichnen möchte, soweit ich weiß, dass 12 Elemente für die Form Vertices (sinnvoll) wäre, aber ich würde müssen auch 12 Elemente für nur zwei Farben verwenden, weil ich für jeden Scheitelpunkt eine Farbe definieren muss, die exponentiell redundant ist, je mehr Scheitelpunkte ich für eine Form verwende.Reduzieren redundante Webgl-Attribut Daten

Gibt es eine Möglichkeit, um, sagen wir, ein Attribut jedoch oft so überspringen, dass diese Linie bis

vertices = [0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1 
      1, 1, 1, 2, 2, 1, 2, 1, 1, 2, 2, 2] 
colors = [1, 0, 0, 1, 
      0, 0, 1, 1] 

So ist die erste Farbe (die erste vec4 in Farben) in Eckpunkten zu den ersten sechs Punkte gilt und Die zweite Farbe gilt für die nächsten sechs Punkte.

Ist das möglich oder muss ich die gleiche Farbe für jeden Eckpunkt in einer Form neu definieren?

+0

Mögliche Duplikate von [Rendering-Meshes mit mehreren Indizes] (http://stackoverflow.com/questions/11148567/rendering-meshes-with-multiple-indices) –

Antwort

0

Die Schranksache zu dem, was Sie suchen, ist instanziert: http://blog.tojicode.com/2013/07/webgl-instancing-with.html.

Andernfalls, wenn Sie wirklich daran interessiert sind, auf nicht Eckpunkten duplizieren, können Sie Uniformen verwenden:

uploadAttrDataForOneShape(); 
setUniform("color", RED); 
draw(); 
setUniform("color", BLUE); 
draw(); 

Praktisch Speicher ist reichlich auf GPUs, und es ist nicht wahrscheinlich lohnt es zu viel Stress über mit Vertex-Redundanz .

+0

Das ist eigentlich genau das, was ich suche, obwohl es ein ist Schade, dass es über WebGL-Implementierungen nicht zu einheitlich erscheint. –