這幾天稍微看了一些關于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_TRIANGLES 等 將會被組裝成圖元
階段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 替換 圖元組裝階段..因為這三個階段所決定都是最重要效果的階段..對于這些的可編程將帶來非常大的好處以及可控制的渲染!!
posted on 2009-08-23 20:23
米游 閱讀(8864)
評論(0) 編輯 收藏 引用 所屬分類:
OpenGL/OSG