- Coordinate Systems
- Coordinate Spaces
- Object Space
- World Space
- Inertial Space
- Camera Space
- Combining Coordinate Spaces
- References
在本文中,我想為想要參與游戲編程的人提供簡(jiǎn)短的數(shù)學(xué)入門。這并不是對(duì)成為一名成功的游戲程序員必須知道的所有數(shù)學(xué)理論的詳盡解釋,但這是在您作為游戲程序員開始之前必須知道的最少量的信息。
本文假設(shè)您有一個(gè)最小的理解向量和矩陣。我將簡(jiǎn)單地展示向量和矩陣的應(yīng)用以及它們?nèi)绾螒?yīng)用于游戲編程。
Coordinate Systems
在我們談?wù)撟儞Q之前,我們必須對(duì)我們的坐標(biāo)系是什么做出正式的定義。
DirectX 使用的默認(rèn)坐標(biāo)系是左手坐標(biāo)系。OpenGL 使用的默認(rèn)坐標(biāo)系是右手坐標(biāo)系。
記住你正在使用的坐標(biāo)系的最簡(jiǎn)單方法是用你的雙手。如果您將拇指,食指和中指指向彼此正交,則每個(gè)手指將指向坐標(biāo)空間中正基本軸的方向。使用左手,拇指指向右側(cè)(
軸),食指指向上方(
軸),中指指向遠(yuǎn)離您(
軸) 。
使用右手,拇指(
軸)和食指(
軸)仍指向同一方向,但中指(
軸)指向相反的方向。如果我們圍繞食指旋轉(zhuǎn)手(
軸)以使拇指指向右側(cè),那么您的中指(
軸)將指向您。
要記住的另一個(gè)重要注意事項(xiàng)是<font color=red>旋轉(zhuǎn)方向</font>。如果您將拇指指向旋轉(zhuǎn)軸的正方向并將手指繞著假想軸彎曲,則手指將沿正向旋轉(zhuǎn)方向卷曲。如果你用左手做這個(gè),當(dāng)你的拇指向下看時(shí),你的手指會(huì)順時(shí)針方向卷曲。但是,如果你用右手做這個(gè),當(dāng)你的拇指向下看時(shí),你的手指會(huì)逆時(shí)針方向卷曲。

下表顯示了正旋轉(zhuǎn)和負(fù)旋轉(zhuǎn)的旋轉(zhuǎn)方向,具體取決于坐標(biāo)系的旋向性。

Coordinate Spaces
- 在3D游戲引擎中,我們通常處理幾個(gè)不同的坐標(biāo)空間。最常用的空間包括對(duì)象空間,世界空間,慣性空間和相機(jī)空間。
Object space, World space, Inertial space, and Camera space
Object Space
在對(duì)象空間(也稱為局部空間或建模空間)中,對(duì)象的頂點(diǎn)相對(duì)于它們描述的對(duì)象表示。也就是說,如果你沒有從原點(diǎn)移動(dòng)對(duì)象,那么藝術(shù)家想要顯示它們的方式。
下圖顯示了對(duì)象空間中對(duì)象的示例。從圖像中可以看出,對(duì)象位于它的相對(duì)原點(diǎn)。

World Space
世界坐標(biāo)空間是描述所有其他對(duì)象空間的全局坐標(biāo)空間。下圖顯示了世界空間中描述的對(duì)象。注意對(duì)象的世界變換如何通過一些平移和旋轉(zhuǎn)將它遠(yuǎn)離世界原點(diǎn)。

Inertial Space
慣性空間是物體空間和世界空間之間的“中間”空間。慣性空間的原點(diǎn)與物體空間的原點(diǎn)相同,慣性空間的軸與世界空間軸的軸平行。
將點(diǎn)從物體空間轉(zhuǎn)換為慣性空間僅需要旋轉(zhuǎn),而將點(diǎn)從慣性空間轉(zhuǎn)換為世界空間僅需要平移。
圖像顯示了慣性空間的一個(gè)例子。

Camera Space
相機(jī)空間是與觀察者關(guān)聯(lián)的坐標(biāo)空間。相機(jī)空間被認(rèn)為是我們所看到的內(nèi)容和方向。攝像機(jī)的坐標(biāo)軸通常假設(shè)正
軸指向右,正
軸指向上,而在左手坐標(biāo)系中,正
軸指向前方或場(chǎng)景。在右手坐標(biāo)系中,
軸反轉(zhuǎn),因此負(fù)
軸指向前方,或指向我們場(chǎng)景中的對(duì)象。 這些攝像機(jī)軸的更常見名稱是
“Right”, “Up”, and “At” 軸。
相機(jī)空間變換與投影變換一起用于回答以下問題:
- 物體完全是在相機(jī)的視野中,部分在視野中,還是完全不在視野中,
- 一個(gè)物體比另一個(gè)物體更靠近相機(jī),
- 物體是直接位于相機(jī)前方,上方,下方,左側(cè)還是右側(cè)的物體。
Combining Coordinate Spaces
在3D計(jì)算機(jī)圖形中,使用 齊次坐標(biāo)系(homogeneous coordinate system) 描述坐標(biāo)空間。齊次坐標(biāo)系允許我們以相似的方式表示所有仿射變換(平移,旋轉(zhuǎn),縮放和透視投影),因此可以輕松地將它們組合為單個(gè)表示。
可以使用矩陣乘法來組合任何數(shù)字坐標(biāo)空間,從而產(chǎn)生可以應(yīng)用于對(duì)象所有頂點(diǎn)的單個(gè)矩陣。
甚至可以組合多個(gè)世界坐標(biāo)空間,以得出描述對(duì)象中所有頂點(diǎn)位置的最終坐標(biāo)空間。這對(duì)于嵌套的坐標(biāo)空間很有用,在該坐標(biāo)空間中,對(duì)象相對(duì)于“父”對(duì)象的位置被表達(dá)。更改父對(duì)象的世界變換后,子對(duì)象的變換也會(huì)隱式更改。使用此方法,可以從幾個(gè)較小的場(chǎng)景構(gòu)建復(fù)雜的場(chǎng)景,然后將其放置在較大的場(chǎng)景中以創(chuàng)建完整的世界。
References
Fletcher Dunn and Ian Parberry (2002). 3D Math Primer for Graphics and Game Development. Wordware Publishing.