我在着色器中有这样的制服:

uniform vec3 origins[10];

和我的代码中的std::vector像这样:
std::vector<glm::vec3> origins;

包含十个glm::vec3元素。

有谁知道我如何将其传递给着色器?我想:
GLint originsLoc = glGetUniformLocation(programID, "origins");
glUniform3fv(originsLoc, 10, origins.data());

会做到的,但不会编译。该错误表明存在no matching function for call to 'glUniform3fv'。如何以满足std::vector函数的方式在glUniform3fv中传递数据?

最佳答案

您应该使用GLfloat并注意glm::vec3。
但这是任何方式:

for (int i = 0; i != 10; i++) {
 GLint originsLoc = glGetUniformLocation(programID, "origins[i]");
 glUniform3f(originsLoc, origins[i].x, origins[i].y, origins[i].z);
}

09-06 05:43