總述
opengl希望在每次頂點著色器執行後,我們可見的所有頂點都為標準化裝置座標(normalized device coordinate, ndc)。也就是說,每個頂點的x,y,z座標都應該在-1.0到1.0之間,超出這個座標範圍的頂點都將不可見。我們通常會自己設定乙個座標的範圍,之後再在頂點著色器中將這些座標變換為標準化裝置座標。然後將這些標準化裝置座標傳入光柵器(rasterizer),將它們變換為螢幕上的二維座標或畫素。
將座標變換為標準化裝置座標,接著再轉化為螢幕座標的過程通常是分步進行的,也就是類似於流水線那樣子。在流水線中,物體的頂點在最終轉化為螢幕座標之前還會被變換到多個座標系統(coordinate system)。將物體的座標變換到幾個過渡座標系(intermediate coordinate system)的優點在於,在這些特定的座標系統中,一些操作或運算更加方便和容易。
對我們來說比較重要的總共有5個不同的座標系統:
區域性空間(local space,或者稱為物體空間(object space))
世界空間(world space)
觀察空間(view space,或者稱為視覺空間(eye space))
裁剪空間(clip space)
螢幕空間(screen space)
將座標從乙個座標系變換到另乙個座標系,我們需要用到幾個變換矩陣,最重要的幾個分別是模型(model)、觀察(view)、投影(projection)三個矩陣。我們的頂點座標起始於區域性空間(local space),在這裡它稱為區域性座標(local coordinate),它在之後會變為世界座標(world coordinate),觀察座標(view coordinate),裁剪座標(clip coordinate),並最後以螢幕座標(screen coordinate)的形式結束。
我們之所以將頂點變換到各個不同的空間的原因是有些操作在特定的座標系統中才有意義且更方便。例如,當需要對物體進行修改的時候,在區域性空間中來操作會更說得通;如果要對乙個物體做出乙個相對於其它物體位置的操作時,在世界座標系中來做這個才更說得通,等等。如果我們願意,我們也可以定義乙個直接從區域性空間變換到裁剪空間的變換矩陣,但那樣會失去很多靈活性。
空間座標
區域性空間:最開始的使用者定義的物體所在的空間座標。
世界空間:該變換是由模型矩陣實現的,通過位移、旋轉、縮放,來將它置於本應該所在的位置和朝向。
觀察空間:通過位移和旋轉的組合完成的,也被稱為opengl的攝像機,觀察空間是將世界空間座標轉化為使用者視野前方的座標而產生的結果。因此觀察空間就是從攝像機的視角所觀察到的空間。平移/旋轉場景從而使得特定的物件被變換到攝像機的前方。這些組合在一起的變換通常儲存在乙個觀察矩陣(view matrix)裡,它被用來將世界座標變換到觀察空間。
裁剪空間:通過投影矩陣,投影到自己設定了乙個有範圍的座標空間,超出範圍的座標將不會被顯示在螢幕上(裁剪掉),在範圍內的座標最後會被對映到-1.0到1.0的螢幕的標準化裝置座標系。
觀察座標變換為裁剪座標的投影矩陣分兩種:正射投影矩陣和透視投影矩陣。
我們可以使用glm的內建函式glm::ortho:
定義平截頭(觀察盒)
rotho(0.0f, 800.0f, 0.0f, 600.0f, 0.1f, 100.0f);
六個引數分別表示為:平截頭的左座標,右座標,低座標,頂座標,近平面座標和遠平面座標。
前兩者定義它的寬,中間兩者定義它的高,後兩者定義它的長。
正射投影矩陣直接將座標對映到2d平面中,即你的螢幕,但實際上乙個直接的投影矩陣會產生不真實的結果,因為這個投影沒有將透視(perspective)考慮進去。所以我們需要透視投影矩陣來解決這個問題。
越遠的東西看起來更小,
openGL系列 1 座標變換
理解物體座標系 世界座標系 相機座標系 裁剪座標系不難,關鍵是要知道對這些座標系的操作分別對應哪些函式。1 gltranslatef glscalef glrotatef 在模型 視角座標系內進行平移 縮放 旋轉 2 glulookat 對眼睛 相機 座標系進行變換 3 通用型 glmatrixmo...
c 開發字處理軟體分析四 座標變換類分析
1.首先需要有乙個基類transformbase 方法virtual qpoint transformpoint qpoint p 將原始區域的點轉換為目標區域中的點 有四個變種,分別對應整形和浮點型以及qpoint 的展開形式 virtual qsize transformsize qsize v...
2 座標系統和顏色變換
gdi 定義了三種形式的座標系統 世界座標系統 頁面座標系統和裝置座標系統 測量相當於文件區域左上角的位置和測量相當於螢幕 桌面 左上角的位置之間的區別非常重要,gdi 為它們指定了不同的名稱 gdi 在裝置繪圖表面 如螢幕 印表機 繪製圖形之前,圖形的座標系統要經過幾步變換 現在改變到頁面座標系統...