Jub*_*bei 14 opengl 3d transform glm-math
我有一个我首先想要旋转的物体(关于它自己的中心)然后将它转换到某个点.我有一个glm :: quat保存旋转和一个glm :: vec3,它保存了需要转换的点.
glm::vec3 position;
glm::quat orientation;
glm::mat4 modelmatrix; <-- want to combine them both in here
modelmatrix = glm::translate(glm::toMat4(orientation),position);
Run Code Online (Sandbox Code Playgroud)
然后在我的渲染功能我做..
pvm = projectionMatrix*viewMatrix*modelmatrix;
glUniformMatrix4fv(pvmMatrixUniformLocation, 1, GL_FALSE, glm::value_ptr(pvm));
Run Code Online (Sandbox Code Playgroud)
..并渲染......
不幸的是,当我应用旋转时,物体围绕原点旋转(离原点越远,轨道越大).
当我只申请该职位时,它的翻译很好.当我仅应用旋转时,它停留在原点并围绕它的中心旋转(如预期的那样).那么为什么我同时应用它们会变得奇怪呢?我错过了什么基本的东西?
Nic*_*las 26
因为你以错误的顺序应用它们.通过这样做glm::translate(glm::toMat4(orientation),position)
,你做的相当于:
glm::mat4 rot = glm::toMat4(orientation);
glm::mat4 trans = glm::translate(glm::mat4(1.0f), position);
glm::mat4 final = rot * trans;
Run Code Online (Sandbox Code Playgroud)
请注意,平移位于矩阵的右侧,而不是左侧.这意味着首先进行翻译,然后相对于翻译进行旋转.因此,翻译后在空间中发生旋转.
您希望首先发生旋转.因此,颠倒矩阵乘法的顺序.