OpenGL翻译glm右侧还是左侧?

OpenGL translation glm right side or left side?

你好,我是 OpenGL 的新手,我需要一些帮助...我发现要在 3D 中平移对象 space,你应该使用模型矩阵乘以顶点。但如果我这样做,我的程序就会运行得很奇怪(没有任何翻译)。如果我尝试将顶点乘以模型矩阵,则翻译有效。我的问题在哪里?

// 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;

glUniformMatrix4fv() 的第三个参数选择是否要在上传矩阵时转置矩阵。由于您使用 GL_TRUE 作为此值:

glUniformMatrix4fv(modelMatrixID, 1, GL_TRUE, glm::value_ptr(M));

您的矩阵将在上传过程中转置。将 matrix/vector 翻译的操作数顺序交换为 pos * mM 以补偿被转置的矩阵。

如果您想坚持更常见的 mM * pos 乘法顺序,您只需使用 GL_FALSE 作为参数,导致矩阵在上传过程中没有转置:

glUniformMatrix4fv(modelMatrixID, 1, GL_FALSE, glm::value_ptr(M));