如何将mat4数组作为制服传递

Posted

技术标签:

【中文标题】如何将mat4数组作为制服传递【英文标题】:How to pass an array of mat4 as a uniform 【发布时间】:2021-04-17 16:03:51 【问题描述】:

我必须像这样将一个 mat4 数组作为制服传递给我的顶点着色器:

在顶点着色器中:

uniform mat4 u_jointMatrix[2];

在我的 C++ 程序中,我是这样做的:

glm::mat4 jointM[2];
//I filled jointM with 32 values (16 x 2)
int jointMatrixLoc = glGetUniformLocation(programT, "u_jointMatrix");
glUniformMatrix4fv(jointMatrixLoc, 1, GL_FALSE, glm::value_ptr(jointM[2]));

我写这个是因为glUniformMatrix4fv(jointMatrixLoc, 1, GL_FALSE, glm::value_ptr(jointM)); 不起作用。

我认为我所做的不正确。有人可以确认吗?

【问题讨论】:

【参考方案1】:

jointM[2] 寻址具有 2 个元素的数组中的第 3 个元素。您必须指定指向第一个元素的指针:

glUniformMatrix4fv(jointMatrixLoc, 1, GL_FALSE, glm::value_ptr(jointM[2]));

glUniformMatrix4fv(jointMatrixLoc, 2, GL_FALSE, glm::value_ptr(jointM[0]));

【讨论】:

谢谢,我不用把 1 改成 2 吗?

以上是关于如何将mat4数组作为制服传递的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Swift 将 Float 制服传递给 iOS 金属着色器?

是否可以将 Mat4 作为 rust 'glam' crate 中的浮点指针传递给 Opengl 调用 gl::UniformMatrix4fv?

如何将多个立方体纹理传递到一个统一的采样器数组中?

创建一个 GLSL 制服数组?

如何从 glm::mat4 读取值

将音频频谱作为libGDX中的纹理传递到着色器