Sto praticando animazioni usando ossa / skinning. Sto cercando di inviare allo shader una matrice per vertice. Posso pensare a questi due approcci.
Metodo 1
Ho una maniglia uniforme per ogni matrice ossea come questa
u_Bone0 = GLES20.glGetUniformLocation(mProgram, "u_Bone[0]");
u_Bone1 = GLES20.glGetUniformLocation(mProgram, "u_Bone[1]");
e nel onDraw
mando ciascuno di loro allo shader:
GLES20.glUniformMatrix4fv(u_Bone0, 1, false, matrix0, 0);
Questo ovviamente non è un buon approccio se ho un gran numero di matrici. La mia seconda idea che non ho ancora provato poiché c'è molto codice da refactoring
Metodo 2
È usare il glUniformMatrix4fv
per inviarli tutti in una volta come (supponiamo che io abbia 20 matrici)
GLES20.glUniformMatrix4fv(u_Bones, 20, false, matrices, 0);
dove matrices
è float[16 * 20]
. Ma poi modificare le matrici per ogni osso diventa un po 'noioso. Ad esempio, se voglio ottenere la terza matrice, ho bisogno di qualcosa sulla falsariga di
float[] _3rd = Arrays.copy(matrices, 3*16, 4*16);
e salvare i valori può diventare ancora più fastidioso.
Sto usando il metodo 1 ora, ma non sembra molto intelligente ...
Qual è il modo migliore per inviare più matrici a uno shader OpenGL ES 2?
LE: Sto usando Android, quindi sto cercando una soluzione Java.