[程式] 遊戲數學:Sterp - 物件旋轉擺扭解構

看板GameDesign (遊戲設計)作者 (CJ Cat)時間7年前 (2018/05/14 12:31), 7年前編輯推噓8(802)
留言10則, 10人參與, 7年前最新討論串1/2 (看更多)
最近在看一個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://www.ptt.cc/bbs/GameDesign/M.1526272268.A.29B.html

05/14 12:49, 7年前 , 1F
05/14 12:49, 1F
※ 編輯: cjcat2266 (23.242.26.50), 05/14/2018 15:09:27

05/14 21:36, 7年前 , 2F
推!!
05/14 21:36, 2F

05/14 23:09, 7年前 , 3F
仰望一下
05/14 23:09, 3F

05/15 10:37, 7年前 , 4F
推推
05/15 10:37, 4F

05/15 21:05, 7年前 , 5F
看不懂...
05/15 21:05, 5F

05/16 19:51, 7年前 , 6F
05/16 19:51, 6F

05/17 00:22, 7年前 , 7F
四元數?
05/17 00:22, 7F
※ 編輯: cjcat2266 (160.33.43.15), 05/17/2018 01:30:04

05/17 01:30, 7年前 , 8F
嗯,是錯字,已更正
05/17 01:30, 8F
※ 編輯: cjcat2266 (160.33.43.15), 05/17/2018 01:31:04

05/18 00:01, 7年前 , 9F
05/18 00:01, 9F

09/16 20:54, 7年前 , 10F
09/16 20:54, 10F
文章代碼(AID): #1Q-H4CAR (GameDesign)
文章代碼(AID): #1Q-H4CAR (GameDesign)