OpenGL 渲染管線理論

2021-06-28 10:39:30 字數 2406 閱讀 1405

這幾天稍微看了一些關於glsl的頂點著色以及片元著色的一些相關知識.目前來講還有乙個著色器則是geometry_shader..我的顯示卡用不了這個功能..當然有點遺憾》_<..

在看了一些之後,大概了解了一些關於opengl渲染管線的知識.看了這個之後對於opengl的學習我想應當是很有幫助.關於這麼一篇的原文則是glsl-lightsource 教程乙個開篇部分.

是英文的..我在osgchina教程論壇上也見到過freesouth大牛的中文翻譯..

關於渲染管線將什麼呢?無非就是在opengl的管道當中各個部分的功能以及如何在管道當中形成了我們想要的最終的一幅圖.(畫素).而管線當中的操作可分為以下幾個部分:

階段1. 指定幾何物件.

如:點 線 三角形.等一些幾何圖元..opengl繪製幾何圖元的方法有以下三種:

<1> 一次乙個頂點.即使用glbegin()  glvertex() glend() 指定幾何物件.

<2> 使用頂點陣列..如gldrawarrays.gldrawelements.等.一次性的繪製大量圖元.

上面這兩種模式則是立即模式.即指定完圖元之後會被立即渲染.即將所有資料發往渲染管線後立即被渲染.

<3>顯示列表模式.它儲存於opengl服務端 (接收opengl命令的一端.) glnewlist glendlist glcalllist .

階段2   頂點處理操作:

不管以上的幾何物件是如何指定的,所有的幾何資料都將會經過這個階段,這個階段負責的則是逐個頂點的操作.

在這個階段能做的工作則是:

1. 頂點變換...根據模型檢視和投影矩陣變換

2. 光照計算 法線變換(法線矩陣 是模型矩陣的左上角3*3的逆矩陣)和法線規格化 

3. 紋理座標變換.(紋理矩陣)

4.材質狀態 紋理座標生成?

而最重要的則是變換以及光照. 每個頂點在這個階段分別是單獨處理的.

這個階段所接收到的資料則是每個頂點的屬性特徵..輸出則是變換後的頂點資料.

階段3  圖元組裝

在頂點處理之後,頂點的全部屬性都已經被確定 在這個階段頂點將會根據應用程式送往的圖元規則.

gl_points gl_********s 等 將會被組裝成圖元

階段4 圖元處理(裁剪 消隱)

<1>這個步驟第乙個所做的應當是裁剪操作..會將圖元與使用者定義的裁剪平面 即glclipplane 和模型投影矩陣所建立的視景比較. 這將會裁剪且丟棄位於視景和裁剪平面外部的圖元.不在予以處理.

<2> 其次.若是採用透視投影 那麼.將會對每個頂點的x,y z座標分別除以w. 

<3>緊接著 則是由視口變換將頂點座標變換至視窗座標.

<4> 執行消隱操作 

階段5  柵格化操作

<1>由圖元處理傳遞過來的圖元資料.在此將會被分解成更小的單元並對應幀緩衝區的各個畫素.這些單元被稱之為 片元. 乙個片元可能包含視窗左邊 深度 顏色 紋理座標等屬性.

<2> 片元的屬性則是圖元上頂點資料等

經過插值

而確定的..這裡生成的片元將會包含主顏色和次顏色.

glshademode() 函式的作用將會這裡體現.即使用插值(平滑著色) 或者使用最後乙個頂點顏色(平面著色)

<3> 點寬 線寬.多邊形模式,正面背面等一些特徵也將是這階段發生作用.

<4> 反走樣也是這個階段起作用.

階段6 片元處理

<1>上紋理 通過紋理座標取得紋理記憶體中相對應的顏色

<2> 霧化 通過片元距離當前視點位置修改顏色.

<3> 顏色彙總..(這個與混合完全不同概念.將(紋理,主定義的顏色,霧化的顏色,次顏色光照階段計算的顏色)彙總一起.

階段7  逐個片元的操作

<1> 所有的一些測試 畫素所有權 剪下(glscissor) alpha測試(glalphafunc) 模版測試(glstencilfunc)

深度測試 (gldephtfunc) 混合(glblendfunc) 

這些操作將會最後影響其在幀緩衝區的顏色值.

階段8  幀緩衝操作

<1>這個階段執行幀緩衝的寫入等操作等..最後產生了顯示出來的畫素.

glcolormask glstrncilmask gldepthmask glcleardepht glclearstencil glclearcolor 等.將在這個階段影響寫入的值.

以上只是討論opengl 圖元繪製的基本過程 那麼基於畫素影象繪製.幾乎形同之上..只是在光柵化處理前的操作不一樣.即經過畫素解碼 畫素傳輸.柵格化 最後形成片元...片元之後的處理完全一樣..

因此 在著色器程式設計領域..你將可實現

vertex shader 替換 頂點處理階段

fragment shader 替換 片元處理階段

geometry shader 替換 圖元組裝階段..

因為這三個階段所決定都是最重要效果的階段..對於這些的可程式設計將帶來非常大的好處以及可控制的渲染!!

opengl渲染管線理論

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

OpenGL 渲染管線理論

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

OpenGL 渲染管線理論

如 點 線 三角形.等一些幾何圖元.opengl繪製幾何圖元的方法有以下三種 1 一次乙個頂點.即使用glbegin glvertex glend 指定幾何物件.2 使用頂點陣列.如gldrawarrays.gldrawelements.等.一次性的繪製大量圖元.上面這兩種模式則是立即模式.即指定完...