[程式] 游戏数学:Sterp - 物件旋转摆扭解构

楼主: cjcat2266 (CJ Cat)   2018-05-14 12:31:02
最近在看一个GDC影片的时候讲者提到
旋转的 "摆扭解构" (swing-twist decomposition)
只是一语带过,但勾起了我的好奇心,所以就开始研究
研究后觉得算蛮有用的工具,所以就写了一篇文来整理和分享心得
一般从一个旋转渐变到另外一个旋转
是用球线性内插 (slerp, spherical linear interpolation)
数学上的意义是,代表旋转的四元数沿着4D球体表面的最短大圆路径移动
虽然在4D定义上是"最短路径",不过在某些情况下,slerp的效果不是最理想的
例如一个长竿在slerp的时候,两端视觉上并不是沿着3D球体表面的最短大圆路径
理想上两端应该要沿着大圆路径"摆动" (swing),然后本身沿着长轴"扭动" (twist)
这个时候就需要用摆扭解构把旋转分成摆动和扭动两个部分
后两部分各自内插后再组合,就可以达到理想的效果
详细解释(含插图动画)、推导、Unity中的实作和证明,请见:
http://allenchou.net/2018/05/game-math-swing-twist-interpolation-sterp/
[补充]
突然想到另外一个摆扭解构的2D应用
如果把扭动轴选择跟萤幕垂直
那就可以用3D物件的旋转牵动2D要素的旋转或者其他资料
因为解构得到的扭转部分就是3D物件旋转投影到萤幕上的结果
但是就效能而言
不如把物件的一个轴投影到萤幕上
然后找该投影和一个固定2D轴的角度
但摆扭解构又不像投影法一样
有物件轴与萤幕垂直的时候会数值炸掉的缺点
作者: PathosCross (木偶君)   2018-05-14 21:36:00
推!!
作者: icecastleo (酷捏)   2018-05-14 23:09:00
仰望一下
作者: leonardo0917   2018-05-15 10:37:00
推推
作者: tzouandy2818 (Naked Bear)   2018-05-15 21:05:00
看不懂...
作者: mabinogi805 (焚离)   2018-05-16 19:51:00
作者: hodsala (猴的沙拉)   2018-05-17 00:22:00
四元数?
楼主: cjcat2266 (CJ Cat)   2018-05-17 01:30:00
嗯,是错字,已更正
作者: laugh714 (挖惹发)   2018-05-18 00:01:00
作者: allenpclee (pc)   2018-09-16 20:54:00

Links booklink

Contact Us: admin [ a t ] ucptt.com