浙江網(wǎng)站建設公司電話網(wǎng)站建設圖片
要理解萬向節(jié)死鎖的產(chǎn)生原因,首先要理解歐拉角變換,歐拉角變換是基于最初始的坐標進行變換而非變換后的坐標進行變換。
歐拉角變換需要空間中的三個角(即變換后每個軸的偏移量),另外還有每個軸的變換順序。值得注意的是,如果按照不同軸的順序來改變每個角,其變換的結果是不一樣的。
在Unity中,變換順序為Y>Z>X
所以先對Y軸變換,就不會影響Z和X軸
初始時物體:
?對Y軸旋轉(zhuǎn)90°:
旋轉(zhuǎn)X軸:正常
?
?旋轉(zhuǎn)Z軸:正常
?
對Z軸進行變換,根據(jù)理論,由于Y軸的變換順序高于Z軸,故Z軸先進行改變,就不符合Unity原有的變換順序,必然在旋轉(zhuǎn)軸時會發(fā)生“異?!?#xff1a;
先旋轉(zhuǎn)Z軸90°:
再旋轉(zhuǎn)X軸:
?
發(fā)現(xiàn)物體卻是繞Y軸進行旋轉(zhuǎn),但是別忘了:由于事先旋轉(zhuǎn)了Z軸,導致初始坐標的X,Y軸發(fā)生了變換,而歐拉角變換卻是基于初始坐標軸來變換的?
旋轉(zhuǎn)Z軸90°,那么相當于X,Y軸交換了,所以從人的視覺效果上看起來,轉(zhuǎn)動X軸時看上去是轉(zhuǎn)動Y軸(其實是轉(zhuǎn)動初始坐標系的X軸)
轉(zhuǎn)動Y軸:
果然,轉(zhuǎn)動Y軸時,視覺看上去卻是圍繞X軸進行旋轉(zhuǎn)。
如果先轉(zhuǎn)動X軸又會發(fā)生說明情況呢:
先轉(zhuǎn)動X軸90° :
轉(zhuǎn)動Y軸:
?
看上去是繞Z軸旋轉(zhuǎn)?
轉(zhuǎn)動Z軸:
?看上去仍是繞Z軸旋轉(zhuǎn)。
這便是萬向節(jié)死鎖,在X軸旋轉(zhuǎn)至90°時,不論是操作Y/Z軸,其效果都是一樣的,相當于丟失了一個自由度。
為了解決這個問題,四元數(shù)就是個很好的方法,下期我將介紹一下四元數(shù)。