2009-01-31 97 views
2

因此,我正在閱讀「3D圖形與遊戲開發的數學入門」一書,它幾乎來自非數學背景,我終於開始掌握矢量/矩陣數學 - 是一種解脫。在兩個座標空間之間轉換一個對象

但是,是的,總是有一個但是,我很難理解一個對象從一個座標空間到另一個座標空間的轉換。在本書中,作者以gun shooting at a car (image)爲例,它在「世界空間」中旋轉了20度(僅爲簡單的2D空間)。所以我們有三個空間:世界空間,槍物體空間和汽車物體空間 - 是否正確?然後書中指出這一點:

「在這個圖中,我們已經介紹了在車上發射子彈步槍正如 左側表示座標空間,我們通常會由寂寂開始現在我們可以想象在保持汽車,槍和彈道軌跡的情況下,將座標空間變換爲符合 汽車的物體空間,現在我們 知道位置槍的位置以及子彈在汽車物體空間的軌跡,我們可以執行相交測試,以查看子彈是否會撞到汽車並在哪裏撞上汽車。「

我按照這個解釋,當我事先知道,該車旋轉在世界空間20 *度,這不是一個問題 - 但這是如何轉化成的情況說,當我有一個弓箭手在從山上向另一個人射擊的遊戲中?我不知道所有東西都在那裏移動的角度?

哪個對象空間在這裏旋轉?世界還是槍空間?是的,你可以看到我有點困惑。

我認爲理想的反應是使用使用位置,角度任意變量汽車和槍例如,等

回答

3

你應該閱讀如何change basis,想矢量,不是數組,但數學的人:P

0

你明白如何概念如何協調空間和2D轉換工作?我發現在嘗試移動到3D之前,座標空間和變換在2D中更易於可視化。通過這種方式,您可以在紙上創建「假設」情景,並幫助您理解主要概念。

在您發佈的圖片中,我認爲其解釋是汽車本身在其內部座標系中沒有改變,但其系統已經相對於世界系統旋轉。

你必須明白,汽車有自己的本地座標系統。汽車的幾何形狀是根據其局部座標系來定義的。因此,無論其在世界上的方向如何,車輛的長度總是沿着其本地系統中的x軸延伸。汽車可以通過改變其局部座標系來定向。

座標系總是相對於另一個系統定義的,除了根,在這個例子中是世界。所以槍有自己的系統,汽車有自己的系統,它們都嵌入到世界的系統中。如果我相對於世界旋轉或移動汽車系統,那麼即使幾何圖形不變,汽車也會旋轉。

這是非常難以解釋的東西,因爲我無法畫出視覺場景,而且我的google-fu無法找到對基礎知識的很好描述。

2

我曾經是一名遊戲程序員,我一次又一次地做了。最終,我擺脫了使用角度。對於每個對象,我都有一個前向矢量和一個向上矢量。然後,您可以從交叉產品中獲得面向右向量的向量。所有空間之間的轉換都成爲點積。

0

正如前面的回覆所示,保持向上,向前和向右是定義(歐幾里得)座標空間的好方法。如果你添加一個原點,它會更好,因爲你可以代表更廣泛的空間。假設我們有兩個空間A和B,A,上,前和右分別是(0,1,0),(0,0,1)和(1,0,0),並且原點爲零,這給出了通常的左手xyz座標。對於B,我們有u =(ux,uy,uz),f =(fx,fy,fz)和r =(rx,ry,rz)起源o =(ox,oy,oz)。那麼對於B中的p =(x,y,z)點,我們有A(x * rx + y * ux + z * fx + ox,x * ry + y * uy + z * fy + oy,x * rz + y * uz + z * fz + oz)。

這可以通過檢查得出。注意到,由於B的右,上和向量向量在A的每個軸上都有分量,所以B中某些座標的分量必須對A中座標的所有三個分量起作用,即由於(0,1,0)in B等於(ux,uy,uz),則(x,y,z)= y * u +(一些其他的東西)。如果我們爲每個座標做這個(x,y,z)= x * r + y * u + z * f +(一些其他的東西)。如果我們觀察到這些項在原點處消失,除了(一些其他的東西),那麼我們認識到(其他一些東西)實際上必須是o,它將A中的座標表示爲x * r + y * u + z * f + o,它是(x * rx + y * ux + z * fx + ox,x * ry + y * uy + z * fy + oy,x * rz + y * uz + z * fz + oz )一旦矢量操作被展開。

該操作也可以逆轉,我們只需在A中設置座標並求解方程以在B中找到它們。 (1,1,1)等於B中的x * r + y * u + z * f + o。這給出了三個未知數的三個方程,可以用聯立方程的方法求解。我不會在這裏解釋這個......但是如果你卡住了,這裏是一個鏈接:link

這些都與你最初的子彈和汽車的例子有什麼關係?那麼,如果你用汽車旋轉一組向上/向右/向前的矢量,並在汽車翻譯時更新原點,則可以從世界空間移動到汽車的本地空間,並使一些測試更容易。例如,不是爲碰撞模型轉換頂點,而是將子彈轉換爲「car local」空間並使用本地座標。如果要轉換汽車的頂點以便在GPU上進行渲染,這很方便,但不希望再次讀取該信息以用於CPU上的物理計算。

在其他用途​​中,它可以通過轉換三個點並執行這些操作來節省轉換x點的次數,這允許您在大量點上組合x個轉換,而不會對整個相同編號中的單個轉換造成顯着的性能影響點。

0

在一個遊戲的情況下,你通常不會知道汽車本身旋轉了20度;相反,您的汽車定位信息會隱含地包​​含該知識。所以在這個二維的例子中,你會知道汽車中心的x,y座標和汽車指向的x,y矢量(這兩個信息都在世界空間中) - 否則你將無法繪製它。這兩條信息都是您需要找到矩陣來在世界空間和汽車物體空間之間進行轉換的。 (然後一個人可以在這個例子中看這個矩陣,並且說,旋轉20度 - 但這不是你通常在遊戲中擔心的信息。)

問題的槍和車可以在三個空間中的任何一箇中解決。所以問題是,哪一個最簡單?大概槍的空間被設置,以便子彈沿着X軸發射。所以很容易把它翻譯成其他空間。 2D汽車可能會在其自己的物體空間中表現出來 - 可能是一組2D線段或2D像素或其他物體。你當然可以把它們翻譯成世界空間或槍的物體空間,但是如果你解決了汽車物體空間的問題,你根本不需要翻譯它們,所以這是解決這個問題的最簡單的方法。

它有點像相對論:從它自己的角度來看,沒有一個空間是旋轉的。儘管與相對論不同,我們把世界空間視爲一個特權固定的參照系。因此,對象的模型空間相對於世界空間被旋轉,鏡像,縮放,翻譯等。

相關問題