複数の行列を頂点シェーダーに送信するにはどうすればよいですか?
ボーン/スキニングを使ったアニメーションを練習しています。頂点ごとに1つのマトリックスをシェーダーに送信しようとしています。私はこれら2つのアプローチを考えることができます。 方法1 このように各骨マトリックスに1つの均一なハンドルがあります u_Bone0 = GLES20.glGetUniformLocation(mProgram, "u_Bone[0]"); u_Bone1 = GLES20.glGetUniformLocation(mProgram, "u_Bone[1]"); そして、onDraw私はそれらのそれぞれをシェーダーに送ります: GLES20.glUniformMatrix4fv(u_Bone0, 1, false, matrix0, 0); マトリックスが多数ある場合、これは明らかに良い方法ではありません。リファクタリングするコードがたくさんあるのでまだ試していない私の2番目のアイデア 方法2 を使用しglUniformMatrix4fvてそれらを一度にすべて送信することです(20個の行列があると仮定します) GLES20.glUniformMatrix4fv(u_Bones, 20, false, matrices, 0); はどこmatricesですかfloat[16 * 20]。ただし、各ボーンのマトリックスを変更するのは少し面倒になります。たとえば、3番目の行列を取得する場合、次の行に沿って何かが必要です。 float[] _3rd = Arrays.copy(matrices, 3*16, 4*16); 値を保存すると、さらに煩わしくなります。 私は現在方法1を使用していますが、あまりスマートに見えません... 複数のマトリックスをOpenGL ES 2シェーダーに送信する最良の方法は何ですか? LE:私はAndroidを使用しているので、Javaソリューションを探しています。