看板 GameDesign 關於我們 聯絡資訊
這是個只看標題跟稍微看下內文就開始亂說話的概念(?),以下可能有錯, 有錯的部分還麻煩大大們指教了。 大部分的人在程式碼寫旋轉的時候,都可能會用尤拉角去描述。 (這裡指譬如說模型輸入時y軸向上,所以想旋轉以符合engine的那種hard-coded) 以我自己的了解,常見的尤拉角的意思是:以固定的順序(像是xyz或是zyx),用三個角 度去描述一個物體如何在空間中旋轉。 換句話說,如果只存三個角度,而每次要旋轉時只改角度,那麼就會有萬向鎖的問題。 就算是用四元數,還是可以漂亮地做出萬向鎖: 假設有個狀況是想要繞x軸轉90度,在程式碼裡面寫上x+=90,然後每次旋轉都按照zxy或y xz去重新組出矩陣或是四元數(不能跟前面結果相乘),大概或許應該彷彿似乎就可以發現 卡住惹。因為就算你用了矩陣或四元數,你就是用了尤拉角去表達了這次的旋轉。 但如果今天的轉法是,把第一次旋轉的三個角度記錄成不管是矩陣或是四元數,第二次 旋轉的三個角度也是換成矩陣或四元數以後,與第一個結果相乘以後,不管什麼角度都是 能夠轉到的。因為你已經不是只用三個角度變數去模擬這個旋轉,而是一次旋轉以後, 又一次旋轉。(但如果是角度累加就out了,因為最後還是三個角度決定這次旋轉) 所以不要再搞混了,尤拉角是一種旋轉的表達方法,四元數跟矩陣是拿來運算的工具。 而從四元數或矩陣往回推的時候,可以被轉成固定順序的尤拉角(畢竟你之後要拿這個資 料去旋轉。而就我所知,不管有沒有指定順序,貌似回推都不會有唯一的結果),或是一根 參考軸+角度(感覺除了沒轉可能有多重解以外,其他會有唯一解?)。 嗯,我已經不知道我在說啥了。 反正就是尤拉角這種表達方法是萬向鎖的根本,但如果尤拉角表達出來一個轉換以後, 又疊加上一個尤拉角表達出來的轉換,那麼就沒問題了。(繞口令) 而矩陣跟四元數有啥差別?據說是因為插值跟儲存空間的緣故。 我是覺得跟二維的複數平面的旋轉類似,就運算規則的問題而已...應該不是什麼神奇的 新世界。 P.S. 貌似有看到換軸的問題,旋轉是剛體變換,如果變換過程有鏡像,貌似不是旋轉就可以解 決的事情惹。要把某個軸換成某個軸的話,貌似直接自己手寫三階矩陣會比較快吧?有 code的話更好,直接把分量swap一下就好。 至於四元數能不能表達鏡像之類的...有請其他大大惹,我是覺得不行啦,感覺複數的運 算規則應該只是剛好符合旋轉而已,頂多再加上放大縮小之類的@@ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.114.221.109 ※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1474379840.A.C96.html ※ 編輯: a27417332 (140.114.221.109), 09/20/2016 22:13:58