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));
你好,我是 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));