OpenGL渲染管線簡介


渲染管線(Rendering Pipeline),通俗地講就是將提供給渲染系統的數據進行處理並渲染到屏幕上的一系列過程
對於OpenGL,其管線主要分為以下幾個過程:
1. 向OpenGL傳入數據
OpenGL要求所有數據都儲存在buffer objects里,而buffer objects就是由OpenGL管理的一塊內存。注意,我們所編寫的程序都是運行在內存的,對於OpenGL的C/S模型來說,OpenGL上下文就是其Server,而Server如何處理我們向其中傳入的數據是我們不得而知的(由制造商的實現決定)。當我們完成了對於buffer的設置,我們就能請求OpenGL Server端來繪制圖形,比如調用glDrawArray方法。
2. 頂點着色(Vertex Shading)
這個階段處理的是頂點數據。我們知道,在OpenGL中,任何幾何物體都是由點、線和三角形構成的,它們統稱為圖元(Primitives)。而圖元又是由頂點構成的,所以頂點數據將被優先處理。頂點着色器只負責處理頂點和與頂點有關的數據,包括頂點坐標的空間變換、頂點顏色處理和其他對於頂點的特殊處理。頂點着色器每從頂點數據流中讀取一個頂點就輸出一個頂點。
3. 曲面細分着色(Tessellation Shading)
這個階段不是必需的,主要實現對曲面進行進一步處理以使其更光滑等功能。
4. 幾何着色(Geometry Shading)
這個階段也不是必需的。與頂點着色器相比,幾何着色器的操作對象是圖元,並且不會保證圖元讀入數量和讀出數量相等(因為這一階段可以拋棄或生成圖元,改變圖元種類,取決於Shade編寫者想要的功能)。
(P.S. 幾何着色器是ShaderModel 4引入的,根據OpenGLWiki,如果幾何着色器被激活,那么在幾何着色之前還會有Early Primitive Assembly;並且結合微軟D3D文檔對於幾何着色器的描述,幾何着色器的輸入其實是圖元的頂點以及與該圖元相鄰的圖元的頂點
5. 圖元裝配(Primitive Assembly)
當我們到達這一階段時,頂點數據以及頂點如何將裝配為圖元的相關信息將被傳入OpenGL內部進行裝配。
6. 裁剪(Clipping)
原始頂點處理完成后,將會有一些頂點落在視口(Viewport)之外,此時要將它們去除。這一步由OpenGL自動完成。
7. 光柵化(Rasterization)
光柵的主要任務就是將圖元映射到屏幕上,它以圖元為單位,決定哪些像素被圖元覆蓋。圖元的頂點被優先確定在屏幕的某個像素上,然后通過算法繪制線段、進行顏色插值等一系列操作。
8. 片段着色(Fragment Shading)
片段(Fragment)就是儲存在幀緩沖(Framebuffer)中的像素點。片段着色器決定了像素點的最終顏色以及其深度。當它認為某個片段不應該被繪制時,它可以進行片段丟棄。
9. 逐片段操作(Per-Fragment Operation)
片段最終被渲染到對應像素點前的最終操作。它對每一個片段進行操作,比如深度測試(depth test)、模板測試(stencil test)。在這個階段完成之后,一幀的渲染圖像就完成了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM