OpenGL 座標系詳解

2021-09-30 20:53:50 字數 2616 閱讀 4591

opengl最終將圖形渲染到的裝置螢幕本質上是2d的,我們對圖形進行渲染的過程就是將3d場景轉換為最終的2d場景的過程。

opengl中定義的點從使用者構造模型的區域性座標系,經過模型變換轉為世界座標系,再經過視變換轉換為相機座標系,再經過投影變換轉換為裁剪座標系,再進行透視除法轉換為規範化裝置座標系(ndc),最後經過視口變換對映到螢幕座標系。

座標變換流程如下圖所示:

注意:

opengl只定義了裁剪座標系、規範化裝置座標系和螢幕座標系。其中的座標變換過程如透視除法、視口變換是有opengl自動執行的。

而區域性座標系(模型座標系)、世界座標系和照相機座標系都是為了方便使用者設計而自定義的座標系。其中的座標變換過程如模型變換、視變換、投影變換可以根據使用者需要自行指定。

上述所有變換過程都是在頂點著色器中執行的。(對於opengl繪製管線,以前是基於固定功能的繪製管線,在opengl 3.1版本之後移除了固定功能的管線繪製,取而代之使用著色器來進行繪製)

從矩陣座標角度來看,流程如下:

1.區域性座標系/物件座標系->世界座標系

也就是通過模型變換,將物體區域性座標轉換到世界座標系座標。模型變換包括平移、旋轉、縮放等。

在固定功能繪製管線情況下,預設opengl中model-view與projection矩陣都是單位矩陣。如果沒有應用任何變換,物件座標系、世界座標系、照相機座標系和裁剪座標系是重合的。

2.世界座標系->照相機座標系

實際上,照相機的指向位置、觀察者方向都是在世界座標系下指定的。

那麼,為什麼要將世界座標系轉換為照相機座標系呢?

因為最終的成像都要通過照相機模型來定義的,轉換到照相機座標系能夠簡化數學計算。該轉換也可以理解為從照相機看到的世界座標系中場景的樣子。

現實世界中,我們通過移動照相機來觀察物體的不同角度;而在opengl中,照相機位置是固定於(0,0,0)並朝向-z軸的,那麼我們通過移動場景來完成這個轉換。參考:

總結來說:對於乙個中心點位於原點的物體,照相機也位於原點。為了對物體某+z面成像,可以通過兩種方式實現:一、物體不動,照相機動。即將照相機從原點沿著+z軸方向移動某個單位距離;二、照相機不動,物體動。即將物體從原點沿著-z軸方向移動某個單位距離。兩種方法實現的效果相同的。

從世界座標系到照相機座標系,有多重指定照相機的方式,其中包括常用的glulookat函式構造的uvn相機座標系。

3.照相機座標系->裁剪座標系

該過程是通過投影完成的。投影就是將物體投影到平面的過場。因為opengl採用虛擬相機成像模型,因此也使用了正投影和透視投影兩種方式。

正投影:又叫平行投影,特點就是無論物體距離攝像機多遠,投影後的物體大小尺寸不變。該投影的視景體是乙個矩形的平行管道,及長方體。常用語建築圖繪製、計算機輔助設計等行業,這些行業要求投影後的物體尺寸與角度不變,以方便施工製造。

透視投影:特點是離視點近的物體大,離視點遠的物體小,遠到極限變消失,稱為滅點。透視投影更接近於真實世界的投影方式。該投影視景體類似乙個頂部與底部都被切除掉的稜錐。常用語動畫、視覺**等行業。

opengl使用函式

glortho

(xleft, xright, ybottom, ytop, znear, zfar)

指定正投影。使用函式

void

glfrustum

(gldouble left, gldouble right, gldouble bottom, gldouble top, gldouble nearval, gldouble farval)

;

或者函式

glperspective

(gldouble fovy, gldouble aspect, gldouble znear, gldouble zfar)

;

來指定透視投影。

4.裁剪座標系->規範化裝置座標系

執行透視除法即可實現裁剪座標系到規範化裝置座標系的轉換。

5.規範化裝置座標系->螢幕座標系

從規範化裝置座標系到螢幕座標系的轉換基本上是乙個線性對映關係。使用glviewport內部的引數來將標準化裝置座標系對映到螢幕座標,每個座標都關聯了螢幕上的乙個點,這個過程稱為視口變換。

參考:

OpenGL 世界座標系

世界座標系 在opengl中,世界座標系是以螢幕中心為原點 0,0,0 且是始終不變的。你面對螢幕,你的右邊是x正軸,上面是y正軸,螢幕指向你的為z正軸。長度單位這樣來定 視窗範圍按此單位恰好是 1,1 到 1,1 即螢幕左下角座標為 1,1 右上角座標為 1,1 這是採用了歸一化的結果 當前繪圖座...

詳解座標系及座標變換 大地座標系(一)

以前讀大學的時候,沒有好好的把座標系學一下,到工作的時候才發現座標系是如此的重要。如果說資料是gis的血肉 那麼座標系就是gis的靈魂。離開這個靈魂gis就是乙個空殼,毫無意義。在gis中座標系被分為兩大類,大地座標系 地理座標系 和投影座標系。大地座標系屬於參心座標系,座標系中的點位於球面上,如w...

OpenGL中的座標系與矩陣

1.opengl圖形管線 顯示流程 模型變換 modeling transformation mc 模型座標 child parent wc 世界座標 標準c語言的矩陣為行主序,即m i j 表示第i行 第j列。opengl中的矩陣為 列主序,即m i j 表示第i列 第j行。以下所有矩陣都為列主序...