历览千载书,时时见遗烈。这篇文章主要讲述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()
的数组中的矩阵元素的顺序考虑这一点。推荐阅读
- 如何简化我的dplyr / apply脚本()
- Android OpenGL ES 3.1着色器无法编译
- Android OpenGL camera2纹理分辨率
- Android NDK GLThread
- 如何在Symfony 3中使用Google Translate免费翻译不同语言的文本
- FOSUserBundle(必须配置路径”fos_user”的子节点”from_email”)
- 如何在Symfony 3中检测移动设备
- 如何在WinForms中为CefSharp启用WebRTC(访问摄像机和麦克风)
- 如何在Symfony 3中将数字转换为单词(数字拼写)