C ++ / OpenGL glm无法将矩阵插入着色器中的统一

Posted

技术标签:

【中文标题】C ++ / OpenGL glm无法将矩阵插入着色器中的统一【英文标题】:C++/OpenGL glm Can't plug matrix into uniform in shader 【发布时间】:2016-12-02 23:54:50 【问题描述】:

我不能在我的 OpenGL 着色器中使用我的矩阵;这给了我一个错误:

glUniform4f(matLocation, mat[0], mat[1], mat[2], mat[3]); // glm mat4

no suitable conversion function from "glm::tvec4<float, glm::highp>" to "GLfloat" exists

我不完全理解为什么它给了我这个错误信息,而且像往常一样,谷歌搜索没有给我任何好的结果。为什么它要我将矩阵转换为浮点数?

【问题讨论】:

矩阵不是 vec4,你应该使用 glUniformMatrix4fv 和 glm::value_ptr。 不是vec4,是mat4。 那你为什么用glUniform4f?它设置 vec4 的四个值。 那我应该用什么? 正如我所说,带有value 参数的glUniformMatrix4fv 是glm::value_ptr(mat) 【参考方案1】:

glUniform4f 只用四个浮点值更新vec4,因此您需要glUniformMatrix4fv,它接受一个指向glm 可以通过glm::value_ptr 提供的16 个浮点值数组的指针。

mat[n] 只产生nth 列,即vec4;因此编译错误。

【讨论】:

以上是关于C ++ / OpenGL glm无法将矩阵插入着色器中的统一的主要内容,如果未能解决你的问题,请参考以下文章

旋转矩阵的问题(openGL/glm)[关闭]

OpenGL/GLSL/GLM - Skybox 像第三人称一样旋转

如果不将 Transpose 设置为 GL_TRUE,OpenGL/GSL 将无法工作

现代 OpenGL:VBO、GLM 和矩阵堆栈

OpenGL转换不使用GLM矩阵

使用 GLM(旋转)为 OpenGL 创建变换矩阵