首页 > 解决方案 > 如何将mat4数组作为制服传递

问题描述

我必须像这样将一个 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));不起作用。

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

标签: c++openglglslglm-mathuniform

解决方案


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

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

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

推荐阅读