天天看點

5.6.1 局部空間和世界空間

假設你在做電影工作,你的團隊已經為了一些特效鏡頭建構的火車場景微縮版。特别是,假設你的任務是做一個小的橋梁。現在,你就不會在在場景的中間建構橋梁,你有可能從不同的角度構件,并注意不要弄亂組成場景的其他縮影。相反,你會把橋梁帶離場景到自己的工作平台上。然後,當全部完成時,您會将橋梁放置在現場的正确位置和角度。

3D藝術家繪制3D對象時做同樣的事情。他們将相對于局部坐标系(局部空間)指定對象的幾何形狀;而不是相對于全局場景坐标系(世界空間),一旦3D模型的頂點在局部空間已經确定,它被放置在全局空間。

為了做到這一點,我們必須定義局部空間和世界空間的轉換;這是通過指定我們想要局部空間的原點坐标軸相對于世界場景坐标系完成的,以及執行坐标變換的變化(見圖5.16和§3.4)。坐标相對于一個局部坐标系到全局場景坐标系的過程被稱為世界變換,相應的矩陣被稱為世界矩陣。

場景中的每個對象都有自己世界矩陣。在所有的對象已經從它的局部空間轉換到世界空間後,那麼所有的坐标是相對于相同的坐标系(世界坐标)。如果您想直接在世界空間中定義一個對象,那麼你就可以提供一個世界矩陣。

相對于它自己的局部坐标系統定義每個模型具有幾個優點:

1.更簡易。例如,通常是在局部空間中的對象将以原點為中心和相對于主軸對稱。作為另一個例子,對于一個立方體如果我們選擇一個局部坐标系,原點位于其中心,并且軸垂直于立方體表面;它的頂點将更容易指定.見圖5.17。

2.對象可能跨越多個場景使用時,在這種情況下,寫死對象的坐标是沒有意義的。相反,最好是相對于一個局部坐标系存儲其坐标,然後通過的一個坐标變化矩陣定義。

3.最後,有時我們在不同的場景的不同的位置,方向和比例繪制同一對象,(例如,樹對象可以重複使用多次去建立一個森林)。每個執行個體複制其對象的頂點和索引資料将是一種浪費。相反,我們存儲幾何對象(即,頂點和索引清單)相對于局部空間的單個副本。 然後我們繪制對象多次,但每次在世界空間中,使用不同的世界矩陣以指定的位置,方向和比例,例如。這就是所謂的執行個體化。

正如§3.4.3所示,對象的世界矩陣是通過描述局部空間的坐标相對于世界空間給定和以矩陣的行放置這些坐标給定的。如果QW=(Qx,QY,QZ,1),UW=(UX,UY,UZ,0),VW=(VX,VY,VZ,0),和WW=(WX,WY,WZ,0),分别地描述原點,x軸,y軸,z軸的局部空間中的均勻坐标,相對于世界空間,那麼我們由§3.4.3知道從局部空間到世界空間的坐标變換矩陣是:

我們看到,構造一個世界矩陣,我們必須直接找出局部空間坐标原點和坐标軸相對世界空間。這有時并不那麼容易和直覺。更常見的方法是定義W作為變換的序列,W = SRT,縮放矩陣S來縮放對象進入世界,接着是旋轉矩陣R來定義局部空間相對于世界空間的方向,平移矩陣T定義本地空間相對于世界空間的原點。從3.5節,我們知道,轉換序列可以被解釋為坐标變換的變化,而W = SRT存儲局部空間相對于世界空間的x軸,y軸,z軸,原點的齊次坐标。

例題: