作者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/m.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