Android openGL GLES20.glUniformMatrix4fv到java

问题描述 投票:1回答:1

我正在尝试将一个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-es
1个回答
2
投票

答案是:是的。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.