2015-05-29 152 views
2

我目前正試圖在Unity 3D中實時顯示來自Mocap-Suit的MoCap數據。 Suit SDK爲每個捕獲的關節返回歐拉角。我希望我可以把這些歐拉角度,並通過設置transform.localEulerAngles屬性與捕獲的歐拉角度,將它們傳遞到Unity中適當的關節。這個效果很好,但是當我的腳向右移動時,我有一些Issus,Unity中的化身移動到左邊。歐拉角度約定轉換

首先我檢查,如果捕獲SDK使用相同的歐拉角慣例一樣團結:

捕獲的SDK醫生說:

「輪作都CCW低頭旋轉軸(在零下方向)每個節點的歐拉角的順序是z,那麼x,那麼y 因此完整的旋轉矩陣是YXZ。「

Unitys醫生說:

「的X,Y和Z的角度表示繞z軸的旋轉Z度,X繞x軸度,繞y軸y度(按該順序) 「。

所以旋轉的順序似乎是相同的,除非我真的不知道什麼是「旋轉矩陣是YXZ」的意思,如果統一也像sdk一樣使用逆時針旋轉。這可能是問題嗎?

我也查了,如果SDK使用相同的定義其座標系統的統一:

捕獲的SDK醫生說:

「的演員將被置於沿Z軸正方向與站立起來Z = 0時最低的腳,Y軸的正下方,正X軸指向演員的右側,這是一個右手座標系。「

由於Unity座標系面向軸的座標系是Y而X正好朝右,因此在設置transform.localEulerAngles屬性時,我只是切換了y和z座標。我知道Unitys座標系是左撇子。我是否也必須考慮這一點?這可能是我的問題的一部分?

編輯:

我現在花在思考這個問題更多豆蔻位的時間,取得了一些圖形,以獲得更好的理解。該SDK使用的座標系看起來像這樣:

SDK coordinate system

化身正在尋找在-y方向和歐拉角的旋轉順序爲z,X,Y。

和多數民衆贊成在統一座標系:

Unity coordinate system

的化身正在z方向。統一的z軸相當於sdk的-y軸。這同樣適用於y,z和x,x。作爲這個的結果,我必須使用sdk的z值作爲統一中的我的y值,來自sdk的取反的y值表示統一中的z值,以及來自sdk的x值表示統一中的x值。

做完這個之後,我想我還有一個問題。Unity現在將首先圍繞z軸旋轉(最初是我的-y軸在sdk中),而不是圍繞x軸(最初是我的x軸),最後圍繞y軸(最初是z軸)。這意味着統一原始sdk軸將按照以下順序進行旋轉:-y,x,z。其實這不是我想要做的,因爲我想以z,x,y順序進行旋轉。

我真的很想知道,如果我對此的想法是正確的,如果是的話,那麼在Unity中返回正確的旋轉順序的解決方案是什麼?

回答

1

那麼,如果我正確地閱讀它看起來他們是不一樣的,一個是a righthanded matrix and the other a lefthanded matrix. 難道你不能以不同的方式繪製它們嗎?切換z和y值?看看是否有幫助?

+0

對,我已經準備好切換z和y值。沒有這一點,我不會得到任何近乎美觀的結果。不過,我認爲這隻能做到這一點,因爲sdks面向軸是z軸,並且統一的y軸是向上軸。也許我必須做更多的事情才能從右手系統轉換到左手系統? – Averius

+0

那麼如果一個鏡像是完全鏡像的,你可以將它轉過來,用所有新值的減號。所以不是將20加到旋轉上,而是將20旋轉。 – ILiveForVR

+0

我對此做出了決定,並得出了我必須否定y值的結果。但我認爲還有另一個問題。請看看我的問題的編輯。 – Averius