Estoy practicando animaciones usando huesos / desollado. Estoy tratando de enviar al sombreador una matriz por vértice. Puedo pensar en estos dos enfoques.
Método 1
Tengo un mango uniforme para cada matriz ósea como este
u_Bone0 = GLES20.glGetUniformLocation(mProgram, "u_Bone[0]");
u_Bone1 = GLES20.glGetUniformLocation(mProgram, "u_Bone[1]");
y en el onDraw
envío cada uno de ellos al sombreador:
GLES20.glUniformMatrix4fv(u_Bone0, 1, false, matrix0, 0);
Obviamente, este no es un buen enfoque si tengo una gran cantidad de matrices. Mi segunda idea, que aún no he probado, ya que hay mucho código para refactorizar
Método 2
Es usar el glUniformMatrix4fv
para enviarlos todos a la vez como (supongo que tengo 20 matrices)
GLES20.glUniformMatrix4fv(u_Bones, 20, false, matrices, 0);
donde matrices
está float[16 * 20]
. Pero luego modificar las matrices para cada hueso se vuelve un poco tedioso. Por ejemplo, si quiero obtener la tercera matriz, necesito algo en la línea de
float[] _3rd = Arrays.copy(matrices, 3*16, 4*16);
y volver a guardar los valores puede ser aún más molesto.
Estoy usando el Método 1 ahora, pero no parece muy inteligente ...
¿Cuál es la mejor manera de enviar múltiples matrices a un sombreador OpenGL ES 2?
LE: Estoy usando Android, así que estoy buscando una solución Java.