[Unity Quaternion]四元數Quaternion的計算方式


什么是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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM