OpenGL渲染管線總結

2021-07-06 02:11:15 字數 2410 閱讀 3872

opengl渲染管線分為兩大部分,模型觀測變換(modelview  transformation)和投影變換(projection  transformation)。做個比喻,計算機圖形開發就像我們照相一樣,目的就是把真實的場景在一張照相紙上表現出來。那麼觀測變換的過程就像是我們擺設相機的位置,選擇好要照的物體,擺好物體的造型。而投影變換就像相機把真實的三維場景顯示在相紙上一樣。

讓我們先來弄清楚opengl中的渲染管線。管線是乙個抽象的概念,之所以稱之為管線是因為顯示卡在處理資料的時候是按照乙個固定的順序來的,而且嚴格按照這個順序。就像水從一根管子的一端流到另一端,這個順序是不能打破的。渲染管線如下圖所示:

opengl中渲染管線的步驟也可以用下圖來描述:

其順序依次為(和照相機比喻):

1、把照相機固定在三腳架上,並對準場景(檢視變換)。

2、對場景映象安排,使各個物體在**中得位置是我們所希望的(模型變換)。

3、選擇相機鏡頭,並調整放大倍數(投影變換)。

4、確定最終**的大小(視口變換)。

一、檢視變換:

相當於把照相機固定在三腳架上並使它對準場景。

void glulookat(gldouble eyex , gldouble eyey , gldouble eyez , gldouble 

centerx , gldouble centery , gldouble centerz , gldouble upx , gldouble upy , 

gldouble upz );

其引數分別表示眼睛位置、瞄向、以及哪個方向是朝上的。

二、模型變換:

其目的是設定模型的位置和方向。

void glscalef(glfloat  x, glfloat  y, glfloat  z);

進行縮放。引數指定了在上那個方向上的縮放情況。

void gltranslatef(glfloat  x, glfloat  y, glfloat  z);

移動模型。

void glrotatef(glfloat  angle, glfloat  x,glfloat  y,glfloat  z)

指定按照從原點到點(x,y,z)的直線進行旋轉的角度。

三、投影變換:

目的是確定視野,確定哪些物體應該位於視野之內以及他們被看到的程度。

分為透視投影和正交投影。

(1)透視投影:

void glfrustum(gldouble  left, 

gldouble  right, 

gldouble  bottom, 

gldouble  top, 

gldouble  nearval, 

gldouble  farval);

引數分別指定了垂直裁剪平面的左右位置、水平裁剪平面的上下位置以及相機離深度裁剪平面的近、遠距離。

glfrustrum定義了乙個平截頭體,它計算乙個用於實現透視投影的矩陣,並把它與當前的投影矩陣(一般為單位矩陣)相乘。

注意:平截頭體並不要求一定是對稱的,它的軸也不需要與z軸對齊。

glfrustrum使用起來不是很直觀,我們可以用opengl工具函式庫的gluperspective函式。

void gluperspective(gldouble  fovy, gldouble  aspect, gldouble  znear, gldouble zfar);

引數fovy表示眼睛張開的角度。aspect表示縱橫比x/y。znear和zfar分別表示觀察者離近遠裁剪平面的距離。

注意:gluperspective僅限於建立沿視線方向同時對稱與x軸和y軸的平截頭體。但是我們通常所需要的也就是這種平截頭體。

(2)正投影

void glortho(     gldouble       left,

gldouble       right,

gldouble       bottom,

gldouble       top,

gldouble       nearval,

gldouble       farval);

建立乙個正交平行的視景體。引數和glfrustrum一樣。

如果是把二維影象投影到二維螢幕這種情況,可以使用opengl工具函式庫中的gluortho2d函式。它與它的三維版本glortho基本相同。

四、視口變換:

決定了場景所對映的有效螢幕區域的形狀。

void glviewport(glint  x, glint  y, glsizei  width, glsizei  height);

設定視口及畫素將要顯示的區域。引數分別指定視窗內部有效螢幕空間的原點(注意(0,0)表示視窗的左下角)以及有效螢幕區域的寬度和高度。

reference:

opengl渲染管線

學習著色器,並理解著色器的工作機制,就要對opengl的固定功能管線有深入的了解。首先要知道幾個opengl的術語 渲染 rendering 計算機根據模型 model 建立影象的過程。模型 model 根據幾何圖元建立的物體 object 幾何圖元 包括點 直線和多邊形等,它是通過頂點 verte...

opengl渲染管線理論

opengl 渲染管線理論 這幾天稍微看了一些關於glsl的頂點著色以及片元著色的一些相關知識.目前來講還有乙個著色器則是geometry shader.我的顯示卡用不了這個功能.當然有點遺憾 在看了一些之後,大概了解了一些關於opengl渲染管線的知識.看了這個之後對於opengl的學習我想應當是...

OpenGL 渲染管線理論

學習著色器,並理解著色器的工作機制,就要對opengl的固定功能管線有深入的了解。渲染 rendering 計算機根據模型 model 建立影象的過程。模型 model 根據幾何圖元建立的物體 object 幾何圖元 包括點 直線和多邊形等,它是通過頂點 vertex 指定的。最終完成了渲染的影象是...