OpenGL + glm库实现四元数的旋转

本文介绍了在构建小型引擎时,如何利用OpenGL和glm库通过四元数来解决欧拉角旋转的万向节死锁问题。详细讲解了glm库中的mat4_cast函数将四元数转换为旋转矩阵,并强调了在构建模型矩阵时遵循缩放-旋转-平移的顺序。通过实例测试验证了旋转矩阵的正确应用,实现了模型90度旋转。
摘要由CSDN通过智能技术生成

最近在搭小引擎,在节点类里面弄了一个返回模型矩阵的方法,想实现旋转,用欧拉角的方式会发生万向节死锁,所以只好用四元数的方式实现,然而learnOpenGL里只提到了用欧拉角的旋转方法,只好去翻翻glm库的文档了

使用四元数进行旋转需要用到几个库

#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/quaternion.hpp>

然后看看具体怎么实现

glm::mat4 model = glm::mat4(1.0f); //创建一个单位矩阵
glm::qua<float> q = glm::qua<float>(glm::radians(glm::vec3(0.0f, 0.0f, 90.0f))); //创建一个绕z轴旋转90度的四元数
model = glm::mat4_cast(q) * model;	//得到一个旋转的模型矩阵

glm::mat4_cast可以把四元数转换成旋转矩阵,这个函数在glm/gtc/matrix_transform.hpp
新版本的glm库旋转用的都是弧度制,所以角度制要记得用radians转换一下

另外要注意的是,我们造引擎的时候,实现模型矩阵,要按照缩放->旋转->平移的顺序处理模型矩阵,运算的话就是

model = 平移矩阵 * 旋转矩阵 * 缩放矩阵 * E

测试

我们用learnOpenGL里读取模型的章节进行测试&

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值