Ich arbeite an einem Projekt mit OpenGl ES 2.0. Jeder Eckpunkt in meinem Netz hat eine feste Anzahl von Farbattributen (sagen wir 5). Die endgültige Farbe pro Vertex wird als eine Interpolation zwischen zwei ausgewählten Farbattributen berechnet.Wie effektiv interpolieren zwischen vielen Farbattributen in GLSL ES 2.0
In meiner Implementierung basiert die Wahl der zwei Farben auf zwei gegebenen Indizes. Ich bin mir bewusst, dass if
Anweisung durch eine große Leistung getroffen werden kann, so eine Option, alle Attribute in ein Array zu setzen und Indexierung verwenden, um gewünschte Farben abrufen. Trotzdem sehe ich einen deutlichen Leistungsabfall.
attribute vec4 a_position;
//The GLSL ES 2.0 specification states that attributes cannot be declared as arrays.
attribute vec4 a_color;
attribute vec4 a_color1;
attribute vec4 a_color2;
attribute vec4 a_color3;
attribute vec4 a_color4;
uniform mat4 u_projTrans;
uniform int u_index;
uniform int u_index1;
uniform float u_interp;
varying vec4 v_color;
void main()
{
vec4 colors[5];
colors[0] = a_color;
colors[1] = a_color1;
colors[2] = a_color2;
colors[3] = a_color3;
colors[4] = a_color4;
v_color = mix(colors[u_index], colors[u_index1], u_interp);
gl_Position = u_projTrans * a_position;
}
Gibt es eine bessere und effizientere Methode zur Berechnung der endgültigen Farbinterpolation? Oder zumindest eine bessere Möglichkeit, Interpolationsfarben zu wählen?
Sie haben Recht, dass ich nicht alle Attribute gleichzeitig verwende. Das Mesh wird jedoch derzeit als Vertex-Puffer-Objekte ausgeführt. Gibt es bei der Verwendung von Vertex-Arrays keinen erheblichen Mehraufwand? Mein Anwendungsfall ist eher statisch. Erzeuge Netze, animiere sie mit Uniformen, zerstöre sie, wenn sie nicht benötigt werden. – plastique
@plastique: "* Aber das Mesh wird derzeit als Vertex-Puffer-Objekte durchgeführt. Gibt es keinen erheblichen Overhead bei der Verwendung von Vertex-Arrays? *" ... Sie * verwenden * Vertex-Arrays. Was denkst du, was du in deinen Pufferobjekten speicherst? Nirgendwo schlug ich vor, dass Sie * clientseitige * Vertex-Arrays verwenden sollten. –