一磷仰、坐標系的基本概念及其重要作用
坐標系是建立圖形與數(shù)之間對應聯(lián)系的參考系。它可以直觀方便的描述圖形的幾何信息境蔼、大小灶平、位置伺通。
在計算機圖形學中,從對象的建模逢享,到在不同顯示設備上顯示罐监、處理圖形時會使用一系列的坐標系。例如:在屏幕上瞒爬,會使用像素構成的二維坐標系來表示圖形的像素值弓柱。
對于一個給定的場景,我們通常并不是按照像素坐標來考慮侧但。我們要考慮屏幕適配矢空、組件復用、軟件跨平臺等等一系列工程化問題俊犯。因此妇多,我們希望將程序中用于描述對象幾何信息(形狀,拓撲結構)的數(shù)值燕侠,和那些用于描述對象中大小和位置的數(shù)值區(qū)分開來者祖。
前者通常被看作一個建模(moduling)的任務,后者是一個觀察(viewing)的任務绢彤。
例如七问,教室里一張桌子,我們需要從不同距離和角度去描繪茫舶,并顯示到屏幕械巡。針對這個問題,我們當然可以把每次“建模-觀察”的結果一一繪制到屏幕上饶氏。但是讥耗,我們需要注意到在這個過程中,桌子的幾何信息客觀上是固定不變的疹启。因此古程,我們可以把“建模”的任務和“觀察”的任務分離開來喊崖,每次繪制只需要改變觀察任務的的數(shù)值即可挣磨。
當我們把“建模”與“觀察”分開后荤懂,產(chǎn)生一個新的問題茁裙,即多坐標系問題。不同的坐標系具有它存在的必要性节仿。
為了方便“建奈钭叮”,我們給每一個建模任務構建一個自己的坐標系廊宪,叫做建模坐標系矾瘾。同時眉踱,為了方便“觀察”,我們也給每一個觀察任務構建一個觀察坐標系霜威。為了完成某一次圖形的顯示,我們需要建立相應“建牟崃遥”任務和相應“觀察”任務的適當?shù)挠成潢P系戈泼,因此產(chǎn)生了世界坐標系的概念。為了使得計算機圖形能夠在特定的屏幕上正確顯示赏僧,我們需要知道特定屏幕的屏幕坐標系大猛,即設備坐標系。為了使得計算機圖形能夠在不同屏幕上正確顯示淀零,我們又定義了規(guī)范化坐標系挽绩。另外,對于一個大場景驾中,我們可能只關注某一局部唉堪。因此,產(chǎn)生了裁剪坐標系肩民。
二唠亚、計算機圖形學中坐標系的分類
1. 世界坐標系(World coodinate system)
在系統(tǒng)(場景)中用于描述其他坐標系位置和對象模型位置的參考坐標系,被稱為世界坐標系持痰。
在我的理解中灶搜,世界坐標系是一個特定場景中全局的、絕對的公共參照系工窍。
注意這句話割卖,“全局的”、“絕對的”患雏,都是在我們所關心的特定的場景中鹏溯,這個特定場景很多情況下并非真實世界或者宇宙,它可能是一間房纵苛,一個虛擬的游戲世界剿涮。
2. 建模坐標系
用于描述對象的幾何信息的獨立于世界坐標系的參照系,叫做建模坐標系攻人。
建模坐標系又被稱為局部坐標系取试。一旦定義了“局部”(相對于上面提到的世界坐標系的全局)的對象,就可以很容易地將“局部”對象放入世界坐標系中怀吻,使它由局部升為全局瞬浓。
3. 觀察坐標系
觀察坐標系主要用于從觀察者的角度對整個世界坐標系中的對象進行重新定位和描述。
依據(jù)觀察窗口的方向和形狀在世界坐標系中定義的坐標系被稱為觀察坐標系蓬坡。
觀察坐標系用于指定圖形的輸出范圍猿棉。
對于世界坐標系來說磅叛,觀察坐標系其實是一種特殊的建模坐標系。
4. 設備坐標系
適合特定輸出設備輸出對象的坐標系叫做設備坐標系萨赁。比如屏幕坐標系弊琴。
在多數(shù)情況下,每一個具體的顯示設備杖爽,都有一個單獨的坐標系統(tǒng)敲董。
5. 規(guī)范化坐標系
規(guī)范化坐標系獨立于設備,能夠很容易地轉(zhuǎn)變?yōu)樵O備坐標系慰安,是一個中間坐標系腋寨。
為使圖形軟件能在不同設備之間移植,采用規(guī)范化坐標系化焕,其坐標軸取值范圍是[-1, 1]或[0, 1]萄窜。
三、坐標系之間的映射變換
前面提到撒桨,對于給定的問題查刻,我們大致分為“建模”和“觀察”兩個任務元莫。對于一個給定的對象模型赖阻,我們已知它在建模坐標系下的坐標,我們?nèi)绾卧谟^察坐標系下得到該對象的定位和描述踱蠢。
像這種已知對象在一個坐標系的坐標火欧,要獲得該對象在另一坐標系下的坐標,我們把這一過程叫做坐標轉(zhuǎn)換茎截。而這個過程離不開世界坐標系苇侵,因為世界坐標系決定了建模坐標系與觀察坐標系的映射關系。
需要注意企锌,坐標轉(zhuǎn)換過程中榆浓,對象的實際位置和狀態(tài)并未發(fā)生改變,我們僅僅是使用了不同的坐標系描述對象的位置撕攒。
例下圖陡鹃,在一個世界坐標系中,一個點
在建模坐標系
中的坐標為
《镀海現(xiàn)在得到觀察坐標系
中
點的坐標萍鲸。
從圖中,我們可以很容易的得出擦俐,點在觀察坐標系
中的坐標為
脊阴。然而,在實際問題中,我們不可能總能通過觀察得出新的坐標嘿期,這就需要通過變換計算得到品擎。
就這個問題,我們先要得到建模坐標系到觀察坐標系
的變換矩陣R:
可以看到备徐,坐標系A先平移向量萄传,再平移向量
,最后基于Y軸反射
得到坐標系B(實際應用中蜜猾,連續(xù)的相同變換操作可以合并盲再,如這里的連續(xù)平移可以合并為
,這里為了更清晰表示變換過程——
瓣铣,將其拆分出來)。代入式(1)得到:
所以贷揽,由式(2)可知基變換矩陣:
由式(3)可得坐標變換矩陣:
則棠笑,點P在坐標系B中的坐標為:
同樣的,我們可以得出的基變換矩陣
為:
他恰好就是的坐標變換矩陣禽绪。因此蓖救,我們要求
的坐標變換矩陣就可以改為求
的基變換矩陣,可以少一次矩陣的逆運算印屁。
通過這個示例循捺,我們可以得出一個結論,計算機中雄人,圖形的顯示過程就是幾何(對象)模型在不同坐標系之間的映射變換从橘。
在圖中我們可以觀察到,可以先經(jīng)過兩次平移础钠,再經(jīng)過一次反射得到恰力,記作
,也可以是先經(jīng)過一次反射再經(jīng)過兩次平移得到,記作
旗吁,或者更多的變換組合……踩萎,但結果肯定是惟一的。
我們嘗試將式(2)中的與
交換順序以實現(xiàn)變換
:
得到的結果是:
這與式(3)的結果不一致很钓,因為矩陣點乘一般不滿足交換律香府。可是码倦,這與我們觀察到的和
都可行的結果不一致企孩。
其實和
兩種變換順序都沒有問題,只不過我們觀察變換
時采用的的參考系出了問題叹洲。
的所有變換操作都隱藏了一個前提:基于目標坐標系(變換操作的參照系)原點的變換柠硕。如
實際應該是:
而中第一步的反射并非基于世界坐標系
軸的變換,而是基于
的反射,所以應該先平移
,再做反射操作蝗柔。正確的表達式是:
修正后的變換過程我們記作闻葵。
可以看到,結果與式(3)相同癣丧。
雖然和
都可以得到正確的結果槽畔,但是為了防止出現(xiàn)如
一般的錯誤或為了減少計算量邑飒,在連續(xù)不同坐標系變換過程中举娩,我們應該始終以本次變換的目標坐標系作為參考系進行先平移后作線性變換。