http://hi.baidu.com/linbaowei/item/4593601ca68ec87c7a5f256b
3D圖形學座標系變換
3D電腦圖形學常用的有:物體座標系,全局座標系,相機座標系,投影座標系以及螢幕座標系。我們主要討論的就是這些座標系間的轉換。這些座標系都是為了完成電腦3D圖形學最最最基本的目標而出現。3D電腦圖形學最基本的目標就是:將構建好的3D物體顯示在2D螢幕座標上,即渲染。
圖1:渲染
初看好像就是將最初的物體座標系轉換到螢幕座標系就可以了呀,為什麼多出了全局座標系,相機座標系,投影座標系。這是因為:在一個大世界裡有多個物體,而每個物體都有自己的座標系,如何表述這些物體間相對的關係,這個多出了全局座標系;如果只需要看到這個世界其中一部分,這裡就多出了相機座標系;至於投影座標系那是因為直接將3D座標轉換為螢幕座標是非常複雜的(因為它們不僅維度不同,度量不同(螢幕座標一般都是像素為單位,3D空間中我們可以現實世界的米,厘米為單位),XY的方向也不同,在2D空間時還要進行座標系變換),所以先將3D座標降維到2D座標,然後2D座標轉換到螢幕座標。
理解3D圖形學的第一步:理解左手座標系與右手座標系。
為什麼會有左手座標系與右手座標系之分?
在3D空間(沒錯!就是3D)中,所有2D座標系是等價的(就是通過一系列的仿射變換,可以互相轉換),而3D座標系不是等價的,通過仿射變換,是無法將左手座標系轉換到右手座標系;也就是說,物體座標系用的就是左手座標系,全局座標系用的是右手座標系,那麼物體可能就是不會是我們所希望的樣子了,可能是倒立的,也可能是背對著我們的,所以我們要區分左手座標系與右手座標系。也許在4D空間,左右手座標系就可以互相變換了吧。
首先討論的是物體座標系->全局座標系。
前面說了為了描述多個物體間相對的關係,這裡引進了全局座標系,所以全局座標系是個參考座標系。這一步的目的將所有的物體的點都轉移到全局座標系,這裡主要涉及的是旋轉,縮放,平移等。不過我將詳細說明為何及如何用矩陣來描述這些變換。
例:如果有兩個座標系C與C`, C`是C繞Z軸旋轉θ得到的。下面是各座標軸的變換:
如果是C座標系的點P(x, y, z),而在C`的表示就是
這時該如何建立矩陣呢? 答案就是區分你用的是行向量還是列向量.也許有人會問為什麼不區分是左手座標系還是右手座標系呢?因為C可以變換到C`,那麼他們一定是同在左手座標系或右手座標系,變換隻能在可以互相轉換的座標系之間進行。
如果你用的是行向量:由於行向量只能左乘矩陣(注意乘與乘以的區別) ,所以矩陣形式應該是這樣:
只有這樣,在左乘矩陣時才能得到上面P`的形式。
如果你用的是列向量: 由於列向量只能右乘矩陣(注意乘與乘以的區別),所以矩陣形式應該是這樣:
只有這樣,在右乘矩陣時才能得到上面P`的形式。
至於如何旋轉,縮放,平移我不在多說。
其次討論全局座標系->相機座標系。
引進相機的目的就是只需看到世界的一部分,而哪些是可以在相機裡看到的,就需要進行篩選。將物體轉換到相機座標系,這樣相機座標系進行篩選時就會簡單很多。如何構建相機座標系呢?我們一般用UVN相機,即一般選取視線方向為Z軸負方向,相機向上且與Z軸垂直的方向為Y軸正向,X軸與Y、Z軸正交組成右手座標系。
再次討論相機座標系->投影座標系。投影的目的就是:降維。兩種投影方式:正交投影與透視投影。
最後討論投影座標系->螢幕座標系。這是最簡單的2D座標變換,也不多說。
圖2:3D電腦圖形學常用的座標系統
圖3:用於頂點處理的座標系統和變換
圖4:3D電腦圖形學
圖5:視景體
圖6:裁剪和視域剔除
PS:
座標系引申:
1)全局座標系(world coordinate Systems),該座標系統主要用於電腦圖形情境中的所有繪圖物件的空間定位和定義,包括觀察者的位置、視線等等。電腦圖形系統中涉及的其它座標系統都是參照它進行定義。
2)局部座標系(Local Coordinate System),主要為考察物體方便起見,獨立於全局座標系來定義物體幾何特性,通常是在不需要指定物體在全局座標系中的方位的情況下,使用局部座標系。一旦你定義“局部”物體,通過指定在局部座標系的原點在全局座標系中的方位,然後通過幾何變換,就可很容易地將“局部”物體放入全局座標系內,使它由局部上升為全域。
3)觀察座標系(Viewing coordinate systems),觀察座標系通常是以視點的位置為原點,通過使用者指定的一個向上的觀察向量(view up vector)來定義整個座標系統,預設為左手座標系,觀察座標系主要用於從觀察者的角度對整個全局座標系內的對象進行重新置放和描述,從而簡化幾何物體在投影面的成像的數學推導和計算。
4)成像面座標系統,它是一個二維座標系統,主要用於指定物體在成像面上的所有點,往往是通過指定成像面與視點之間的距離來定義成像面,成像面有時也稱投影面,可進一步在構影面上定義稱為視窗的方形地區來實現部分成像。
5)螢幕座標系統,也稱裝置座標系統,它主要用於某一特殊的電腦圖形顯示裝置(如光柵顯示器)的表面的點的定義,在多數情況下,對於每一個具體的顯示裝置,都有一個單獨的座標系統,在定義了成像視窗的情況下,可進一步在螢幕座標系統中定義稱為視圖區(view port)的有界地區,視圖區中的成像即為實際所觀察到的。
6)裝置座標系和規格化裝置座標系
裝置座標系(Device Coordinate, DC)是圖形裝置上採用的與具體裝置相關的座標系。裝置座標系一般採用整數座標,其座標範圍由具體裝置的解析度決定。裝置座標繫上的一個點一般對應圖形裝置上的一個像素。由於具體裝置的限制,裝置座標系的座標範圍一般是有限的。
規格化裝置座標系(Normal Device Coordinate, NDC)是為了避免裝置相關性而定義的一種虛擬裝置座標系。規格化座標系的座標範圍一般從0到1,也有的是從-1到+1。採用規格化裝置座標系的好處是屏蔽了具體裝置的解析度,使得圖形處理能夠盡量避開對具體裝置座標的考慮。實際圖形處理時,先將全局座標轉換成對應的規格化裝置座標,然後再將規格化裝置座標映射到具體的裝置座標上去。
7)齊次座標
所謂齊次座標是指用一個n+1維向量表示一個n維向量。若n維空間中點的位置向量用笛卡兒座標表示為(p1,p2,…,pn),且是唯一的。若用齊次座標表示時,此向量有n+1個座標分量(hp1,hp2,…,hpn,h),且不唯一。非齊次座標與齊次座標是一對多的關係,但不影響圖形的形狀。例如,一個二維空間點[x,y],如果用齊次座標表示則為[hx,hy,h]。通常,在實際應用中採用正常化齊次座標,就是取h=1,即用三維向量[x,y,1]表示二維向量[x,y].
採用齊次座標的優越性主要表現在以下兩方面。
(1) 齊次座標提供了用矩陣運算把二維、三維甚至更高維空間中的一個點集從一個座標系變換到另一個座標系的有效方法。
(2) 齊次座標可以表示無窮遠點。例如,在n+1維空間(hp1,hp2,…,hpn,h), h=0的齊次座標實際上表示了一個n維(p1,p2,…,pn)的無窮遠點。在三維情況下,利用齊次座標表示投影變換,其幾何意義會更加清晰。
Directx中的座標變換:
Directx中使用是左手座標系,並使用行向量
(1)世界變換和全局座標系:物體在三維空間的運動和變形過程稱為世界變換,如平移、旋轉、縮放等。物體在其中運動的三維空間稱為世界空間,它的三維座標系表示稱為全局座標系,物體頂點在全局座標系裡的座標變換稱為世界變換。
(2)取景變換和觀察座標系:把圖形顯示想象成攝像過程,取景變換就像攝像機中攝像機的擺放一樣,在三維圖形顯示中,需要設定一個虛擬攝像機,螢幕顯示的圖形就是虛擬攝像機拍攝在膠片上的景物。以攝像機位置為參考原點,攝像機觀察的方向為座標軸,建立的座標系稱為觀察座標系,物體在觀察座標系中的相對座標稱為觀察座標,頂點從全局座標到觀察座標的轉換稱為取景變換。
(3)投影座標和投影座標系:物體從全局座標描述轉換到觀察座標後,可將三維物體投影到二維表面上,即投影到虛擬攝像機的膠片上,這個過程就是投影變換。以膠片中心為參考原點的空間座標系稱為投影座標系,物體在投影座標系中的座標稱為投影座標。
(4)視區變換和螢幕座標系:物體在投影座標系中的表示為浮點座標,通過定義螢幕顯示地區(一般為顯示視窗大小),將浮點座標轉化為像素座標的過程稱為視區變換,該像素座標值稱為螢幕座標。例如,如果定義視區大小為寬640像素、高480像素,那麼投影座標(1.0f, 0.5f)經過視區變換後的螢幕座標為(640, 240),如果定義視區大小為寬1024像素、高800像素,經過視區變換後的螢幕座標為(1024, 400)。
渲染是指將3D幾何體、光、貼圖、材質、粒子特效、後期處理等等這些資料通過光柵處理用2D映像顯示出來。
即時渲染是軟體的渲染速度理想上達到一個介於眼睛極限速率(25到30之間的幀率)和螢幕重新整理速率(通常為60幀率)的速率。