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 数组的偏移量。
我在 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 数组的偏移量。