四元数组旋转_四元数应用——顺序无关的旋转混合

四元数系列:

—————————————————————————————————————————

知乎首文。应@杨智为 的邀请来帮忙贡献一篇文章。

好多年不写文章了,已经不知道该怎么写了,哪里写的不好还请指出(手动害怕

本文是我个人伪原创的一种旋转混合的方法,应该可以算是真·干货。说伪原创是因为我并没有在网上找到有解析解的、顺序无关的、四元数混合方法,但是在弄出来这个方法之后,找到了一个结构相同,但并不是用在四元数上的方法(后面会提到)。所以这篇文章也算是一个可能网上找不到的方法吧。

0. 引言

做骨骼动画的时候,一定会遇到需要混合多个Pose的情况,假如Pose中每个节点的姿态都用一个包含位移、旋转、缩放的Transform来表示,那么多个Transform要如何混合呢?位移和缩放都好说,表示旋转的四元数要如何混合?

我们知道旋转操作所构成的空间非线性,无法对旋转操作直接进行线性叠加。表示旋转的四元数也不能直接简单的线性叠加,并且旋转操作具有不可交换性,交换后结果不同(如下图)。

如果不要求那么高的精度而只是找个看起来凑合的近似解的话,扩展一下对于两个四元数的NLerp操作(Normalized Lerp),直接对多个四元数进行线性叠加然后Normalize一下,在这些四元数所代表的旋转差别不大的情况下,效果也还可以。

那要进行“精确”的混合要怎么做呢?按照顺序对这些四元数依次相乘肯定是不行的,因为四元数乘法顺序相关;用SLerp只能针对两个四元数进行“精确”的混合(这里“精确”指的是角速度匀速的球面插值),但是SLerp没法扩

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值