我正在使用骨骼/蒙皮练习动画。我正在尝试为着色器每个顶点发送一个矩阵。我可以想到这两种方法。
方法一
这样的每个骨基质都有一个统一的手柄
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
是用来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解决方案。