坐標系的概念和坐標系之間的變換

一、坐標系的基本概念及其重要作用

坐標系是建立圖形與數之間對應聯系的參考系。它可以直觀方便的描述圖形的幾何信息、大小、位置。

在計算機圖形學中,從對象的建模,到在不同顯示設備上顯示、處理圖形時會使用一系列的坐標系。例如:在屏幕上,會使用像素構成的二維坐標系來表示圖形的像素值。


顯示屏上的像素坐標系.png

對于一個給定的場景,我們通常并不是按照像素坐標來考慮。我們要考慮屏幕適配、組件復用、軟件跨平臺等等一系列工程化問題。因此,我們希望將程序中用于描述對象幾何信息(形狀,拓撲結構)的數值,和那些用于描述對象中大小和位置的數值區分開來。

前者通常被看作一個建模(moduling)的任務,后者是一個觀察(viewing)的任務。

例如,教室里一張桌子,我們需要從不同距離和角度去描繪,并顯示到屏幕。針對這個問題,我們當然可以把每次“建模-觀察”的結果一一繪制到屏幕上。但是,我們需要注意到在這個過程中,桌子的幾何信息客觀上是固定不變的。因此,我們可以把“建模”的任務和“觀察”的任務分離開來,每次繪制只需要改變觀察任務的的數值即可。

當我們把“建模”與“觀察”分開后,產生一個新的問題,即多坐標系問題。不同的坐標系具有它存在的必要性。

為了方便“建模”,我們給每一個建模任務構建一個自己的坐標系,叫做建模坐標系。同時,為了方便“觀察”,我們也給每一個觀察任務構建一個觀察坐標系。為了完成某一次圖形的顯示,我們需要建立相應“建模”任務和相應“觀察”任務的適當的映射關系,因此產生了世界坐標系的概念。為了使得計算機圖形能夠在特定的屏幕上正確顯示,我們需要知道特定屏幕的屏幕坐標系,即設備坐標系。為了使得計算機圖形能夠在不同屏幕上正確顯示,我們又定義了規范化坐標系。另外,對于一個大場景,我們可能只關注某一局部。因此,產生了裁剪坐標系。

二、計算機圖形學中坐標系的分類

1. 世界坐標系(World coodinate system)

在系統(場景)中用于描述其他坐標系位置和對象模型位置的參考坐標系,被稱為世界坐標系

在我的理解中,世界坐標系是一個特定場景中全局的、絕對的公共參照系。

注意這句話,“全局的”、“絕對的”,都是在我們所關心的特定的場景中,這個特定場景很多情況下并非真實世界或者宇宙,它可能是一間房,一個虛擬的游戲世界。

2. 建模坐標系

用于描述對象的幾何信息的獨立于世界坐標系的參照系,叫做建模坐標系

建模坐標系又被稱為局部坐標系。一旦定義了“局部”(相對于上面提到的世界坐標系的全局)的對象,就可以很容易地將“局部”對象放入世界坐標系中,使它由局部升為全局。

3. 觀察坐標系

觀察坐標系主要用于從觀察者的角度對整個世界坐標系中的對象進行重新定位和描述。

依據觀察窗口的方向和形狀在世界坐標系中定義的坐標系被稱為觀察坐標系

觀察坐標系用于指定圖形的輸出范圍。

對于世界坐標系來說,觀察坐標系其實是一種特殊的建模坐標系。

4. 設備坐標系

適合特定輸出設備輸出對象的坐標系叫做設備坐標系。比如屏幕坐標系。

在多數情況下,每一個具體的顯示設備,都有一個單獨的坐標系統。

5. 規范化坐標系

規范化坐標系獨立于設備,能夠很容易地轉變為設備坐標系,是一個中間坐標系。
為使圖形軟件能在不同設備之間移植,采用規范化坐標系,其坐標軸取值范圍是[-1, 1]或[0, 1]。

三、坐標系之間的映射變換

前面提到,對于給定的問題,我們大致分為“建模”和“觀察”兩個任務。對于一個給定的對象模型,我們已知它在建模坐標系下的坐標,我們如何在觀察坐標系下得到該對象的定位和描述。

像這種已知對象在一個坐標系的坐標,要獲得該對象在另一坐標系下的坐標,我們把這一過程叫做坐標轉換。而這個過程離不開世界坐標系,因為世界坐標系決定了建模坐標系與觀察坐標系的映射關系。

需要注意,坐標轉換過程中,對象的實際位置和狀態并未發生改變,我們僅僅是使用了不同的坐標系描述對象的位置。

例下圖,在一個世界坐標系Oxy中,一個點P在建模坐標系A中的坐標為(1, 1)。現在得到觀察坐標系BP點的坐標。

坐標變換.png

從圖中,我們可以很容易的得出,點P在觀察坐標系B中的坐標為(3, 2)。然而,在實際問題中,我們不可能總能通過觀察得出新的坐標,這就需要通過變換計算得到。

就這個問題,我們先要得到建模坐標系A(\alpha_1,\alpha_2)到觀察坐標系B(\beta_1,\beta_2)的變換矩陣R:
\left\{ \begin{matrix} \alpha_1 \\ \alpha_2 \\ 1 \end{matrix} \right\} = R \cdot \left\{ \begin{matrix} \beta_1 \\ \beta_2 \\ 1 \end{matrix} \right\} \tag1
可以看到,坐標系A先平移向量T_1(-1,-3),再平移向量T_2(5,2),最后基于Y軸反射S(-1,1)得到坐標系B(實際應用中,連續的相同變換操作可以合并,如這里的連續平移可以合并為T_{12}(4,-1),這里為了更清晰表示變換過程——建模坐標系\rightarrow 世界坐標系\rightarrow 觀察坐標系,將其拆分出來)。代入式(1)得到:
\left\{ \begin{matrix} \alpha_1 \\ \alpha_2 \\ 1 \end{matrix} \right\} = \left\{ \begin{matrix} 1 & 0 & -1 \\ 0 & 1 & -3 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} 1 & 0 & 5 \\ 0 & 1 & 2 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} -1& 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} \beta_1 \\ \beta_2 \\ 1 \end{matrix} \right\} \tag2
所以,由式(2)可知A\rightarrow B基變換矩陣:
M_{ab}= \left\{ \begin{matrix} -1& 0 & 4 \\ 0 & 1 &-1 \\ 0 & 0 & 1 \end{matrix} \right\}\tag3
由式(3)可得坐標變換矩陣M^{-1}_{ab}
M_{ab}^{-1}= \left\{ \begin{matrix} -1& 0 & 4 \\ 0 & 1 & 1 \\ 0 & 0 & 1 \end{matrix} \right\}\tag4
則,點P在坐標系B中的坐標P_1為:
P_1 = \left\{ \begin{matrix} -1 & 0 & 4 \\ 0 & 1 & 1 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} 1 \\ 1 \\ 1 \\ \end{matrix} \right\} = \left\{ \begin{matrix} 3 \\ 2 \\ 1 \end{matrix} \right\}
同樣的,我們可以得出B\rightarrow A的基變換矩陣M_{ba}為:
M_{ba}= \left\{ \begin{matrix} -1& 0 & 4 \\ 0 & 1 & 1 \\ 0 & 0 & 1 \end{matrix} \right\}\tag5
他恰好就是A \rightarrow B的坐標變換矩陣。因此,我們要求A \rightarrow B的坐標變換矩陣就可以改為求B \rightarrow A的基變換矩陣,可以少一次矩陣的逆運算。

通過這個示例,我們可以得出一個結論,計算機中,圖形的顯示過程就是幾何(對象)模型在不同坐標系之間的映射變換。

在圖中我們可以觀察到,A\rightarrow B可以先經過兩次平移,再經過一次反射得到,記作M_a,也可以是先經過一次反射再經過兩次平移得到,記作M_b,或者更多的變換組合……,但結果肯定是惟一的。

我們嘗試將式(2)中的ST_1交換順序以實現變換M_b
\left\{ \begin{matrix} \alpha_1 \\ \alpha_2 \\ 1 \end{matrix} \right\} = \left\{ \begin{matrix} -1& 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} 1 & 0 & -1 \\ 0 & 1 & -3 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} 1 & 0 & 5 \\ 0 & 1 & 2 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} \beta_1 \\ \beta_2 \\ 1 \end{matrix} \right\} \tag6 \color{red}{(錯誤示例)}
得到的結果是:
\left\{ \begin{matrix} \alpha_1 \\ \alpha_2 \\ 1 \end{matrix} \right\} = \left\{ \begin{matrix} -1 & 0 & -4 \\ 0 & 1 & -1 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} \beta_1 \\ \beta_2 \\ 1 \end{matrix} \right\} \tag7 \color{red}{(錯誤示例)}
這與式(3)的結果不一致,因為矩陣點乘一般不滿足交換律。可是,這與我們觀察到的M_aM_b都可行的結果不一致。

其實M_aM_b兩種變換順序都沒有問題,只不過我們觀察變換M_b時采用的的參考系出了問題。

M_a的所有變換操作都隱藏了一個前提:基于目標坐標系(變換操作的參照系)原點的變換。如T_1(-1,-3)實際應該是:
T_1= M \cdot \left\{ \begin{matrix} 1 & 0 & -1 \\ 0 & 1 & -3 \\ 0 & 0 & 1 \end{matrix} \right\}, \text(M為單位矩陣)
M_b中第一步的反射并非基于世界坐標系Y軸的變換,而是基于Y_0(1,n)的反射,所以應該先平移T_x(-1,0),再做反射操作。正確的表達式是:
S_1= \left\{ \begin{matrix} 1 & 0 & -1 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} -1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{matrix} \right\}
修正后的變換過程我們記作M_c
M_c = \left\{ \begin{matrix} 1 & 0 & -1 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} -1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} 1 & 0 & 0 \\ 0 & 1 & -3 \\ 0 & 0 & 1 \end{matrix} \right\} \cdot \left\{ \begin{matrix} 1 & 0 & -5 \\ 0 & 1 & 2 \\ 0 & 0 & 1 \end{matrix} \right\} = \left\{ \begin{matrix} -1& 0 & 4 \\ 0 & 1 & -1 \\ 0 & 0 & 1 \end{matrix} \right\}
可以看到,結果與式(3)相同。

雖然M_aM_c都可以得到正確的結果,但是為了防止出現如M_b一般的錯誤或為了減少計算量,在連續不同坐標系變換過程中,我們應該始終以本次變換的目標坐標系作為參考系進行先平移后作線性變換。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,622評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,716評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,746評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,991評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,706評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,036評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,203評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,725評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,451評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,677評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,857評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,266評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,606評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,407評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,643評論 2 380

推薦閱讀更多精彩內容