2016-07-25 61 views
0

此頁面https://goocreate.com/learn/everything-you-always-wanted-to-know-about-rotation/描述了一個函數'LookAt',因爲它能夠旋轉3D對象以面對另一個對象。的注視功能的內部動作進行說明(但在代碼中未列出),爲:LookAt函數

功能的工作原理是,它需要的實體和目標 位置並減去它們,以得到一個背面向量。然後它計算向上矢量和後向矢量之間的交叉乘積以得到右側矢量 。然後它計算右邊的向量和後向量之間的叉積,得到一個向上的向量,這個向量與方向和向右的向量正交,最後存儲在我們的旋轉矩陣3x3內在它們各自的 行中歸一化的所有三個 向量。

我想複製這個沒有3D功能庫來幫助我。我有3D矢量減法,矩陣乘法,點和交叉乘積函數。 (我在Lua編碼)

我無法弄清楚的是如何讓一個物體與另一個物體朝向相同的方向(以及希望的方向)。

我已經讀過,這只是一個基於角度創建旋轉矩陣的問題,但是我發現通過返回一個角度來談論3D角度中的角度,我會認爲會有3個角度 - 一個爲每架飛機。

我該如何構造這個旋轉矩陣?我不知道我的物體面向哪個方向,這就是爲什麼計算物體的當前x,y,z角度的問題是一個問題。我認爲我需要的是一個函數來確定一個對象的當前三維角度,並將其轉換爲另一個對象的旋轉矩陣。

回答

-1

首先:

你不能把一個對象轉換成特定的方向,如果對象沒有一個方向。 所以你要麼必須知道定義對象方向的矢量,要麼你必須自己定義一個矢量。

的注視功能的內部動作進行說明(但在不代碼列出 )爲:

這是不正確的。他們鏈接了包含閱讀文章時可能會想到的問題的FAQ。 (!更多精心

的爲您提供以下信息:

What is the algorithm behind lookAt inside Matrix3x3: 
The abbreviated algorithm is: 

z.set(back_direction).normalize(); 
x.set(up).cross(z).normalize(); 
y.set(z).cross(x); 
m[0] = x[0]; 
m[1] = x[1]; 
m[2] = x[2]; 
m[3] = y[0]; 
m[4] = y[1]; 
m[5] = y[2]; 
m[6] = z[0]; 
m[7] = z[1]; 
m[8] = z[2]; 

關於您的問題,角度的數量:

,如果你繞3,您只需要3個角度軸。例如,x,y,z。 但是你可以圍繞任何軸旋轉。那麼當然你只需要一個角度。

獲取有關線性代數的教科書或瀏覽Web以獲取教程和示例。確保你明白你在做什麼。它將幫助您解決將來沒有示例代碼的問題。這是簡單的數學:)