gpt4 book ai didi

c++ - 无法将矩阵转换为四元数并返回

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:36:35 33 4
gpt4 key购买 nike

我试图将我的旋转矩阵存储为四元数,然后当我想用它进行转换时,将它转换回来。我正在使用为这些提供 mat4_cast 和 quat_cast 的 glm 库。但是,当我执行以下代码时:

glm::mat4 origTest = glm::lookAt(position, lookAtPt, up);
glm::quat quatTest = glm::quat_cast(origTest);
glm::mat4 mat4Test = glm::mat4_cast(quatTest);

我得到不同的 origTest 和 mat4Test 值。我在这里错过了什么吗?位置、lookAtPt 及以上是 glm::vec3。

最佳答案

我想通了。四元数存储对象在局部空间中的旋转。因此,为了导出可以从 glm::lookAt() 获得的完整 View 矩阵,您首先需要将局部空间中的四元数转换为矩阵。然后,您可以将单位矩阵平移到所需位置,然后执行 SRT 乘法以导出最终 View 矩阵。在这种情况下,您需要反转平移矩阵,因为我们在相机上进行逆平移,并且您还可以使用与 (lookAtPt - position) 方向相同的适当“lookAt” vector

/* 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);

关于c++ - 无法将矩阵转换为四元数并返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23337151/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com