Android openGL GLES20.glUniformMatrix4fv到java

历览千载书,时时见遗烈。这篇文章主要讲述Android openGL GLES20.glUniformMatrix4fv到java相关的知识,希望能为你提供帮助。
我正在尝试将一个android openGL项目转换为java,并且我在理解内部的问题时遇到了麻烦

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

在opengl ES中,我有两个数组,每个数组长度为128个浮点数
float[] jointMatrix; float[] invBindPoseMatrix;

然后通过这些调用将其发送到着色器
GLES20.glUniformMatrix4fv(jointMatrixHandle, 8, false,DAE.jointMatrix, 0); GLES20.glUniformMatrix4fv(invBindPoseMatrixHandle, 8, false, DAE.invBindPoseMatrix, 0);

在着色器中,它被收到
uniform mat4 jointMatrix[8] uniform mat4 invBindPoseMatrix[8]

我的问题是,android是否通过一次调用发送整个128项浮点数组,并自动细分为8个4x4矩阵?偏移量为16. 0-15-31-等。?
答案【Android openGL GLES20.glUniformMatrix4fv到java】答案是:是的。
你可能会过度思考这一点。这真的没有魔力。在大多数语言中,数组的元素按顺序排列在内存中。因此,如果你看一下8个4x4矩阵数组的内存布局,它只是一个8 * 4 * 4 = 128个浮点数的序列。由于声明了数组的类型,它们将以某种方式解释。但就内存布局而言,它与128个浮点数的数组完全相同。
所以计数为8的glUniformMatrix4fv()为8个矩阵提供了这个内存的内容。因为,如上所述,8个矩阵的数组只是内存中128个浮点数的序列,它消耗128个浮点数,并将它们直接复制到矩阵数组使用的内存中。
使用OpenGL中的矩阵要注意的一个方面是它们以列主要顺序存储。必须按照传递给glUniformMatrix4fv()的数组中的矩阵元素的顺序考虑这一点。

    推荐阅读