Kemikler / deri kullanarak animasyonlar yapıyorum. Gölgelendiriciye köşe başına bir matris göndermeye çalışıyorum. Bu iki yaklaşımı düşünebilirim.
Yöntem 1
Bunun gibi her kemik matrisi için tek bir kolum var
u_Bone0 = GLES20.glGetUniformLocation(mProgram, "u_Bone[0]");
u_Bone1 = GLES20.glGetUniformLocation(mProgram, "u_Bone[1]");
ve onDraw
her birini gölgelendiriciye gönderiyorum:
GLES20.glUniformMatrix4fv(u_Bone0, 1, false, matrix0, 0);
Çok sayıda matrisim varsa bu iyi bir yaklaşım değildir. Refactor için çok fazla kod olduğu için henüz denemediğim ikinci fikrim
Yöntem 2
glUniformMatrix4fv
Hepsini aynı anda göndermek için kullanmaktır (20 matrisim olduğunu varsayın)
GLES20.glUniformMatrix4fv(u_Bones, 20, false, matrices, 0);
nerede matrices
olduğunu float[16 * 20]
. Ancak daha sonra her kemik için matrisleri değiştirmek biraz sıkıcı olur. Örneğin, 3. matrisi elde etmek istersem,
float[] _3rd = Arrays.copy(matrices, 3*16, 4*16);
ve değerleri geri kaydetmek daha can sıkıcı olabilir.
Şimdi Yöntem 1 kullanıyorum, ama çok akıllı görünmüyor ...
Bir OpenGL ES 2 gölgelendiricisine birden çok matris göndermenin en iyi yolu nedir?
LE: Android kullanıyorum, bu yüzden bir Java çözümü arıyorum.