作者cjcat2266 (CJ Cat)
看板GameDesign
标题[程式] 游戏数学:Sterp - 物件旋转摆扭解构
时间Mon May 14 12:31:02 2018
最近在看一个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轴的角度
但摆扭解构又不像投影法一样
有物件轴与萤幕垂直的时候会数值炸掉的缺点
--
Web
http://AllenChou.net
Twitter
http://twitter.com/TheAllenChou
LinkedIn
http://linkedin.com/in/MingLunChou
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 23.242.26.50
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/GameDesign/M.1526272268.A.29B.html
1F:推 askaleroux: 05/14 12:49
※ 编辑: cjcat2266 (23.242.26.50), 05/14/2018 15:09:27
2F:推 PathosCross: 推!! 05/14 21:36
3F:推 icecastleo: 仰望一下 05/14 23:09
4F:推 leonardo0917: 推推 05/15 10:37
5F:推 tzouandy2818: 看不懂... 05/15 21:05
6F:推 mabinogi805: 推 05/16 19:51
7F:→ hodsala: 四元数? 05/17 00:22
※ 编辑: cjcat2266 (160.33.43.15), 05/17/2018 01:30:04
8F:→ cjcat2266: 嗯,是错字,已更正 05/17 01:30
※ 编辑: cjcat2266 (160.33.43.15), 05/17/2018 01:31:04
9F:推 laugh714: 推 05/18 00:01
10F:推 allenpclee: 推 09/16 20:54