您好我是OpenGL的新手,我需要一些帮助...我发现要在3D空间中翻译对象,您应该使用模型矩阵乘以顶点。但是,如果我这样做,我的程序工作很奇怪(没有翻译)。如果我尝试顶点乘以模型矩阵,则翻译起作用。我的问题在哪里?
// Wrong program nothing translate
(Cpp main)
glm::mat4 M;
M = glm::translate(M, glm::vec3(-0.5f, -0.5f, -0.5f));
glUniformMatrix4fv(modelMatrixID, 1, GL_TRUE, glm::value_ptr(M));
(Vertex shader)
in vec4 pos;
uniform mat4 mM;
gl_Position = mM*pos;
如果在我的顶点着色器中我更改了它......它可以正常工作
gl_Position = pos*mM;
答案 0 :(得分:1)
glUniformMatrix4fv()
的第三个参数选择是否要将矩阵转置为上传矩阵的一部分。由于您使用GL_TRUE
来表示此值:
glUniformMatrix4fv(modelMatrixID, 1, GL_TRUE, glm::value_ptr(M));
您的矩阵将在上传过程中进行转置。将矩阵/向量转换的操作数顺序交换为pos * mM
可以补偿被转置的矩阵。
如果你想坚持更常见的mM * pos
乘法顺序,你只需要使用GL_FALSE
作为参数,导致矩阵上传而不会在过程中被转换:< / p>
glUniformMatrix4fv(modelMatrixID, 1, GL_FALSE, glm::value_ptr(M));