什么是Quaternion四元數
1843年,William Rowan Hamilton發明了四元數,但直到1985年才有一個叫Ken Shoemake的人將四元數引入計算機圖形學處理領域。四元數在3D圖形學中主要用於旋轉,骨骼動畫等。
簡單地來說,四元數描述了一次旋轉:繞任意一個軸(V)旋轉一個弧度(θ)。
那么四元數q就與(V,θ)兩個參數有關。
具體公式:
q = (sin(θ / 2) * V,cos(θ / 2) )
q = (sin(θ / 2) * x,sin(θ / 2) * y,sin(θ / 2) * z,cos(θ / 2))
在Unity中使用Quaternion對象
創建Quaternion對象
// float radians = 90 / 360f * Mathf.PI * 2; // Vector3 n = Vector3.up; // float w = Mathf.Cos (radians / 2); // float s = Mathf.Sin (radians / 2); // float x = n.x * s; float y = n.y * s; float z = n.z * s; // transform.rotation = new Quaternion (x, y, z, w);
上述代碼,可以設置一個游戲對象沿着Y軸向上的方向順時針旋轉90度
Quaternion對象的方法
實例方法
Set用法
// float radians = degress / 360f * Mathf.PI * 2; // Vector3 n = Vector3.up; // float w = Mathf.Cos (radians / 2); // float s = Mathf.Sin (radians / 2); // float x = n.x * s; float y = n.y * s; float z = n.z * s; // Quaternion q = new Quaternion (); q.Set (x, y, z, w); // transform.rotation = q;
SetFromRatation用法
// Quaternion q = new Quaternion (); q.SetFromToRotation (Vector3.up, Vector3.left); // transform.rotation = q;
SetLookRotation用法
// Quaternion q = new Quaternion (); q.SetLookRotation (Vector3.back); // transform.rotation = q;
靜態方法
// transform.rotation = Quaternion.identity; // transform.rotation = Quaternion.AngleAxis (degress, Vector3.up); // transform.rotation = Quaternion.Dot (q1, q2); // transform.rotation = Quaternion.Inverse (q1); // transform.rotation = Quaternion.Lerp(q1,q2,Time.deltaTime); // transform.rotation = Quaternion.Slerp (q1, q2, Time.deltaTime);