學習著色器,並理解著色器的工作機制,就要對opengl的固定功能管線有深入的了解。
首先要知道幾個opengl的術語
渲染(rendering):計算機根據模型(model)建立影象的過程。
模型(model):根據幾何圖元建立的物體(object)。
幾何圖元:包括點、直線和多邊形等,它是通過頂點(vertex)指定的。
最終完成了渲染的影象是由在螢幕上繪製的畫素組成的。在記憶體中,和畫素有關的資訊(如畫素的顏色)組織成位平面的形式,位平面是一塊記憶體區域,儲存了螢幕上每個畫素的乙個位的資訊。例如,它指定了乙個特定畫素的顏色中紅色成分的強度。位平面又可以組織成幀緩衝區(framebuffer)的形式,後者儲存了圖形硬體為了控制螢幕上所有畫素的顏色和強度所需要的全部資訊。
opengl的固定功能管線
關於渲染管線將什麼呢?無非就是在opengl的管道當中各個部分的功能以及如何在管道當中形成了我們想要的最終的一幅圖.(畫素).而管線當中的操作可分為以下幾個部分:
階段1. 指定幾何物件.
如:點 線 三角形.等一些幾何圖元..opengl繪製幾何圖元的方法有以下三種:
<1> 一次乙個頂點.即使用glbegin() glvertex() glend() 指定幾何物件.
<2> 使用頂點陣列..如gldrawarrays.gldrawelements.等.一次性的繪製大量圖元.
上面這兩種模式則是立即模式.即指定完圖元之後會被立即渲染.即將所有資料發往渲染管線後立即被渲染.
<3>顯示列表模式.它儲存於opengl服務端 (接收opengl命令的一端),操作函式有 glnewlist、 glendlist、 glcalllist .
階段2 頂點處理操作:
不管以上的幾何物件是如何指定的,所有的幾何資料都將會經過這個階段,這個階段負責的則是逐個頂點的操作.
在這個階段能做的工作則是:
頂點變換:根據模型檢視和投影矩陣變換
光照計算和法線變換(法線矩陣 是模型矩陣的左上角3*3的逆矩陣)和法線規格化
紋理座標變換.(紋理矩陣)
材質狀態:紋理座標生成
而最重要的則是變換以及光照. 每個頂點在這個階段分別是單獨處理的.
這個階段所接收到的資料則是每個頂點的屬性特徵..輸出則是變換後的頂點資料.
階段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(幾何著色器) 替換 圖元組裝階段..
因為這三個階段所決定都是最重要效果的階段..對於這些的可程式設計將帶來非常大的好處以及可控制的渲染!!
在前面的固定功能管線提到了,在階段5:柵格化操作 過程中, 片元的屬性會由圖元上頂點資料等經過插值而確定。在頂點著色器處理完畢後,opengl都會將頂點與頂點之間的片元(基本上可以理解為畫素)的屬性(如位置座標、紋理座標)進行線性插值。所以,在紋理座標為(1,0)和(0,0)中間的片元會得到乙個(0.5,0)的紋理座標,在紋理座標為(0,0)和(1,1)之間的片元會得到乙個(0.5,0.5)的紋理座標。然後將這些經過差值處理之後的片元交給片元著色器處理。片元著色器確定最終的片元顏色。
opengl渲染管線理論
opengl 渲染管線理論 這幾天稍微看了一些關於glsl的頂點著色以及片元著色的一些相關知識.目前來講還有乙個著色器則是geometry shader.我的顯示卡用不了這個功能.當然有點遺憾 在看了一些之後,大概了解了一些關於opengl渲染管線的知識.看了這個之後對於opengl的學習我想應當是...
OpenGL 渲染管線理論
學習著色器,並理解著色器的工作機制,就要對opengl的固定功能管線有深入的了解。渲染 rendering 計算機根據模型 model 建立影象的過程。模型 model 根據幾何圖元建立的物體 object 幾何圖元 包括點 直線和多邊形等,它是通過頂點 vertex 指定的。最終完成了渲染的影象是...
OpenGL 渲染管線理論
如 點 線 三角形.等一些幾何圖元.opengl繪製幾何圖元的方法有以下三種 1 一次乙個頂點.即使用glbegin glvertex glend 指定幾何物件.2 使用頂點陣列.如gldrawarrays.gldrawelements.等.一次性的繪製大量圖元.上面這兩種模式則是立即模式.即指定完...