OpenGL翻译glm右侧还是左侧?

时间:2015-04-04 00:20:28

标签: c++ opengl translation glm-math

您好我是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;

1 个答案:

答案 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));