将矩阵转换为四元数并返回时出现问题
Trouble converting matrix to quaternion and back
我正试图将旋转矩阵存储为四元数,然后当我想使用它进行变换时,将其转换回。我使用的是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);
我得到了origTest和mat4Test的不同值。我是不是遗漏了什么?position、lookAtPt和up是glm::vec3。
我想明白了。四元数存储对象在局部空间中的旋转。因此,为了导出可以从glm::lookAt()获得的全视图矩阵,首先需要将局部空间中的四元数转换为矩阵。然后,您将单位矩阵转换为所需位置,并执行SRT乘法以导出最终视图矩阵。在这种情况下,您需要反转平移矩阵,因为我们正在相机上进行反向平移,并且您还将使用与(lookAtPt-位置)方向相同的适当"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);
相关文章:
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- 从 C++ 中的函数返回数组地址问题
- 在类中返回结构时出现问题
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 这个返回元素位置的基于循环的函数有什么问题?
- 编译问题:在函数"_start"中:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 特征返回类型的 pybind11 问题
- 类的大问题,以及从空函数c++返回
- 基本的 c++ 问题:如果我在函数中创建某些内容并返回它会发生什么?
- C++模板编程设计问题 - 根据输入文件返回不同的类型
- 存储另一个函数返回的布尔数组时遇到问题
- 为什么在分配给成员变量之前获取unique_ptr的返回是一个问题?
- 从 C++ 中的函数返回双精度的问题
- 返回不停止函数,递归函数问题?(编程练习,动态规划,Levenshtein 回溯)
- 字符 * 未从重载运算符或内存管理问题正确返回
- 带有指针返回问题的c++协方差问题
- 在 c++ 中使用 sqlite 的 void 函数中的"返回"问题
- C++动态矩阵乘法返回问题
- C++ 无限循环,返回问题
- STL 列表<mystruct>返回问题