Android openGL GLES20.glUniformMatrix4fv到java

时间:2015-03-17 09:27:28

标签: android opengl-es

我正在尝试将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-等。?

1 个答案:

答案 0 :(得分:2)

答案是:

你可能会过度思考这个问题。它真的没什么神奇之处。在大多数语言中,数组的元素按顺序排列在内存中。因此,如果你看一下8个4x4矩阵数组的内存布局,它只是一个8 * 4 * 4 = 128个浮点数的序列。由于声明了数组的类型,它们将以某种方式解释。但就内存布局而言,它与128个浮点数的数组完全相同。

因此,计数为8的glUniformMatrix4fv()为8个矩阵提供了此内存的内容。因为,如上所述,8个矩阵的数组只是内存中128个浮点数的序列,它消耗128个浮点数,并将它们直接复制到矩阵数组使用的内存中。

在OpenGL中使用矩阵时要注意的一个方面是它们以列主要顺序存储。必须按照传递给glUniformMatrix4fv()的数组中的矩阵元素的顺序考虑这一点。