我有一个对象,首先想要将它绕着自己的中心旋转,然后将其平移到某个点。我有一个保存旋转的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);
然后在我的渲染函数中执行以下操作。
pvm = projectionMatrix*viewMatrix*modelmatrix;
glUniformMatrix4fv(pvmMatrixUniformLocation, 1, GL_FALSE, glm::value_ptr(pvm));
不幸的是,当我应用旋转时,对象只围绕原点轨道运动(“位置”离原点越远,轨道越大)。
当我仅应用位置时,它可以正常平移。当我仅应用旋转时,它会停留在原点并围绕其中心旋转(符合预期)。那么当我同时应用它们时,为什么会出现问题?我是否遗漏了一些基础知识?