Saya berlatih animasi menggunakan tulang / menguliti. Saya mencoba mengirim shader satu matriks per simpul. Saya bisa memikirkan dua pendekatan ini.
Metode 1
Saya punya satu pegangan seragam untuk setiap matriks tulang seperti ini
u_Bone0 = GLES20.glGetUniformLocation(mProgram, "u_Bone[0]");
u_Bone1 = GLES20.glGetUniformLocation(mProgram, "u_Bone[1]");
dan di onDraw
saya kirim masing-masing ke shader:
GLES20.glUniformMatrix4fv(u_Bone0, 1, false, matrix0, 0);
Ini jelas bukan pendekatan yang baik jika saya memiliki banyak matriks. Gagasan kedua saya yang belum saya coba karena ada banyak kode untuk refactor
Metode 2
Apakah menggunakan glUniformMatrix4fv
untuk mengirim semuanya sekaligus seperti (anggap saya memiliki 20 matriks)
GLES20.glUniformMatrix4fv(u_Bones, 20, false, matrices, 0);
di mana matrices
adalah float[16 * 20]
. Tetapi kemudian memodifikasi matriks untuk setiap tulang menjadi sedikit membosankan. Sebagai contoh, jika saya ingin mendapatkan matriks ke-3, saya perlu sesuatu di sepanjang baris
float[] _3rd = Arrays.copy(matrices, 3*16, 4*16);
dan menyimpan kembali nilainya dapat menjadi lebih menyebalkan.
Saya menggunakan Metode 1 sekarang, tetapi tidak terlihat sangat pintar ...
Apa cara terbaik untuk mengirim banyak matriks ke shader OpenGL ES 2?
LE: Saya menggunakan Android, jadi saya mencari solusi Java.