Ich übe Animationen mit Knochen / Häuten. Ich versuche, dem Shader eine Matrix pro Scheitelpunkt zu senden. Ich kann mir diese beiden Ansätze vorstellen.
Methode 1
Ich habe einen einheitlichen Griff für jede Knochenmatrix wie diese
u_Bone0 = GLES20.glGetUniformLocation(mProgram, "u_Bone[0]");
u_Bone1 = GLES20.glGetUniformLocation(mProgram, "u_Bone[1]");
und in der onDraw
sende ich jeden von ihnen an den Shader:
GLES20.glUniformMatrix4fv(u_Bone0, 1, false, matrix0, 0);
Dies ist offensichtlich kein guter Ansatz, wenn ich eine große Anzahl von Matrizen habe. Meine zweite Idee, die ich noch nicht ausprobiert habe, da es viel Code zum Refactor gibt
Methode 2
Ist das zu verwenden glUniformMatrix4fv
, um sie alle auf einmal zu senden (nehme an, ich habe 20 Matrizen)
GLES20.glUniformMatrix4fv(u_Bones, 20, false, matrices, 0);
wo matrices
ist float[16 * 20]
. Aber dann wird das Ändern der Matrizen für jeden Knochen etwas mühsam. Wenn ich zum Beispiel die 3. Matrix erhalten möchte, brauche ich etwas in der Art von
float[] _3rd = Arrays.copy(matrices, 3*16, 4*16);
und das Zurückspeichern der Werte kann noch ärgerlicher werden.
Ich benutze jetzt Methode 1, aber es sieht nicht sehr klug aus ...
Was ist der beste Weg, um mehrere Matrizen an einen OpenGL ES 2-Shader zu senden?
LE: Ich benutze Android und suche nach einer Java-Lösung.