OpenGL渲染流程

2021-08-28 11:13:52 字數 2328 閱讀 3338

管線這個術語描述了opengl渲染的整個過程。opengl採用cs模型:c是cpu,s是gpu,c給s的輸入是vertex資訊和texture資訊,s的輸出是顯示器上顯示的影象。下面這2個圖比較清楚的講解了opengl的渲染管線。

相信沒有opengl基礎的應該看不懂,下面會簡單的介紹這個流程,再看下文之前,建議先看gpu大百科全書系列文章,對理解opengl工作原理絕對有幫助。

下面這個圖取自《opengl es 3.0程式設計指南》,此流程為可程式設計管線。

1.vbo/vao(頂點緩衝區物件或頂點陣列物件):

vbo/vao 是cpu提供給gpu的頂點資訊,包括了頂點的位置、顏色(只是頂點的顏色,和紋理的顏色無關)、紋理座標(用於紋理貼圖)等頂點資訊。

2.vertexshader(頂點著色器):

負責把輸入的資料進行矩陣變換位置,計算光照公式生成逐頂點顏⾊,⽣成/變換紋理座標.並且把位置和紋理座標這樣的引數傳送到片段著色器。

3.primitiveassembly(圖元裝配):

頂點著色器下乙個階段是圖元裝配,圖元(prmitive)是三角形、直線或者點精靈等幾何物件。這個階段,把頂點著色器輸出的頂點組合成圖元。

4.rasterization光柵化):

光柵化是將圖元轉化為一組二維片段的過程,然後,這些片段由片段著色器處理(片段著色器的輸入)。這些二維片段代表著可在螢幕上繪製的畫素。根據頂點著色器輸出的每個圖元頂點的資料生成每個片段值的機制稱作插值(interpolation)。就是從cpu提供的分散的頂點資訊是如何變成螢幕上密集的畫素的,圖元裝配後頂點可以理解成變為圖形,光柵化時可以根據圖形的形狀,插值出那個圖形區域的畫素(紋理座標v_texcoord、顏色等資訊)。注意,此時的畫素並不是螢幕上的畫素,是不帶有顏色的。接下來的片段著色器完成上色的工作。

5.fragmentshader(片段著色器):

片段著色器為片段(畫素)上的操作實現了通用的可程式設計方法,光柵化輸出的每個片段(畫素)都執行一遍片段著色器,對光柵化階段生成每個片段執行這個著色器,生成乙個或多個(多重渲染)顏色值作為輸出。

6.per-fragment operations(逐片段操作

在此階段,每個片段上執行如下功能:

(1)pixelownershiptest(畫素歸屬測試):

這個用來確定幀緩衝區中位置(x,y)的畫素是不是歸當前上下文所有。例如,如果乙個顯示幀緩衝區視窗被另乙個視窗所遮蔽,則視窗系統可以確定被遮蔽的畫素不屬於此opengl的上下文,從而不顯示這些畫素。

(2)scissortest(剪裁測試):

如果該片段位於剪裁區域外,則被拋棄

(3)stenciltest and depthtest(模板和深度測試):

深度測試比較好理解,若片段著色器返回的深度小於緩衝區中的深度,則捨棄。模板測試沒有用過,不清楚具體功能,猜測功能應該和名字一樣,模板形狀內可通過。

(4)blending(混合):

將新生成的片段顏色值與儲存在幀緩衝區的顏色值組合起來,產生新的rgba。

(5)dithering(抖動):

不知道這個是神馬作用?

最後把產生的片段放到幀緩衝區(前緩衝區或後緩衝區或fbo)中,若不是fbo,則螢幕繪製緩衝區中的片段,產生螢幕上的畫素。

opengl渲染管線

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

opengl渲染管線理論

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

OpenGL 渲染管線理論

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