OpenGL ES:从客户端更改glsl中的矩阵向​​量的一部分

OpenGL ES: change part of matrix-vector in glsl from client side

我在 glsl 中有这套制服

uniform mat4 u_MVPMatrix[64];

即用64个矩阵填充

它用于在我的游戏中变换 64 个形状。效果不错!!!

我的问题是,如果我想旋转或调整某个精灵的大小,是否可以更改此矩阵向量的一部分?我可以使用以下方法吗:

glUniformMatrix4fv(int location, int count, boolean transpose, float[] value, int offset)

?

我不明白 offset 参数,我以为它在 glsl 中用作 matrix-vec 的偏移量但显然不是?

  GLES30.glUniformMatrix4fv(mMVPMatrixHandleEyes, 1, false, mMVPMatrixEyes, 1);  

如果我更改偏移量参数,则会出现异常:

 java.lang.IllegalArgumentException: length - offset < count*16 < needed
                                                                                 at android.opengl.GLES20.glUniformMatrix4fv(Native Method)

这个问题的解决方案是什么?我是否应该专注于在 GPU 端进行更改?但是制服可以换吗?

glsl 中的统一数组保证具有连续的位置。因此,制服 u_MVPMatrix[i] 的位置为 mMVPMatrixHandleEyes + i。此位置可用于通过将其传递给 glUniformMatrix4fv.

来设置单个矩阵(或多个连续的矩阵)

相比之下,offset 参数是传入的 float[] 数组的偏移量,而不是 glsl 数组的偏移量。