0
我需要旋轉一個物體以相對於現實世界進行精確的旋轉。因此調用Input.gyro.attitude
將返回一個表示設備位置的四元數。另一方面,這迫使我根據這個四元數計算每一個旋轉作爲默認旋轉。 一種簡單的方法來設置朝上將是以下一些對象:Unity c#四元數:用z軸交換y
Vector3 up = Input.gyro.attitude.eulerAngles;
...
transform.rotation = Quaternion.Euler(up.x, up.y, up.z);
此旋轉up.z
圍繞Z,然後圍繞x up.x
,和up.y
圍繞y。
我的問題是,座標系不太正確,在我的應用程序中,交換了y和z軸(我使用Vuforia,所以它總是相對於標記),這意味着圍繞z的旋轉導致繞y旋轉,反過來。這裏事情變得困難:顯然
transform.rotation = Quaternion.Euler(up.x, up.z, up.y);
失敗,因爲這還是第一次旋轉圍繞Z的,但現在up.y
。正確的順序是創建一個旋轉,首先圍繞y旋轉,然後是x,然後是z。
由於歐拉角是從四元檢索,
transform.rotation = Quaternion.identity;
transform.Rotate(0, up.eulerAngles.z, 0);
transform.Rotate(up.eulerAngles.x, 0, 0);
transform.Rotate(0, 0, up.eulerAngles.y);
不會工作,當然。
但是,我找不到辦法做到這一點。我可以忽略一些東西嗎
謝謝,那個人做到了!四元數是一個痛苦的處理... –