sha*_*enk 4 c++ opengl glm-math
我试图将我的旋转矩阵存储为四元数,然后当我想用它进行转换时,将其转换回来.我正在使用glm库,为这些提供mat4_cast和quat_cast.但是,当我执行以下代码时:
glm::mat4 origTest = glm::lookAt(position, lookAtPt, up);
glm::quat quatTest = glm::quat_cast(origTest);
glm::mat4 mat4Test = glm::mat4_cast(quatTest);
Run Code Online (Sandbox Code Playgroud)
我为origTest和mat4Test获得了不同的值.我在这里错过了什么吗?位置,lookAtPt和up是glm :: vec3.
我弄清楚了.四元数将对象的旋转存储在本地空间中.因此,为了导出可以从glm :: lookAt()获得的全视图矩阵,首先需要将局部空间中的四元数转换为矩阵.然后,您将根据所需位置转换单位矩阵,然后执行SRT乘法以导出最终视图矩阵.在这种情况下,您需要反转平移矩阵,因为我们在相机上进行反向平移,并且您还将使用与(lookAtPt - position)方向相同的适当"lookAt"向量
/* Mat4 to Quat */
glm::vec3 lookAtPt = direction;
glm::mat4 rotMatrix = glm::lookAt(glm::vec3(0), lookAtPt, up);
glm::quat rotation = glm::quat_cast(rotMatrix);
/* Quat to Mat4 */
glm::mat4 identityMat = glm::mat4(1.0f);
glm::mat4 rotMatrix = glm::mat4_cast(rotation); //rotation is glm::quat
glm::mat4 transMatrix = glm::translate(identityMat, position);
glm::mat4 viewMatrix = rotMatrix * glm::inverse(transMatrix);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7487 次 |
| 最近记录: |