整合 OpenGLES 渲染管線系列(1)

2021-08-21 20:49:23 字數 1332 閱讀 1666

在opengl中,任何事物都在3d空間中,而螢幕和視窗卻是2d畫素陣列,這導致opengl的大部分工作都是關於把3d座標轉變為適應你螢幕的2d畫素。3d座標轉為2d座標的處理過程是由opengl的圖形渲染管線管理的。圖形渲染管線是一系列按序處理操作,可以被劃分為兩個主要部分:第一部分把你的3d座標轉換為2d座標,第二部分是把2d座標轉變為實際的有顏色的畫素,最終會寫入framebuffer進行顯示。

注:2d座標和畫素也是不同的,2d座標精確表示乙個點在2d空間中的位置,而2d畫素是這個點的近似值,2d畫素受到你的螢幕/視窗解析度的限制;graphics pipeline,大多譯為管線,實際上指的是一堆原始圖形資料途經乙個輸送管道,期間經過各種變化處理最終出現在螢幕的過程

display list;是一組用於將來執行而提供的已編譯好的opengl命令集,所有的資料、頂點和畫素都可以儲存在乙個display list中,它可以緩衝這些資料為opengl命令集的執行提高效率。

vertex operation;一組3d座標集合(vertex data),通過modelview矩陣操作,由object座標係向eye座標系變換。

primitive assembly;按照圖元的規則(點、線、三角形),將vertex data裝配並構造成圖元。其中,圖元還會經過投影、裁剪、透視除法等變化,才能從3d場景對映成螢幕場景。

texture memory;紋理影象被載入到texture memory中,用於圖元的貼圖。

raterization;將圖元和紋理分解成乙個個fragment,將圖元的點線面轉換成由乙個個柵格構成的畫素。

fragment operation;為每乙個fragment確定顏值,其對應著framebuffer中的乙個畫素,然後通過blending、dithering、logical與masking等操作,最終會將圖元和紋理貼圖對映成螢幕framebuffer上相應的畫素。

以下是3d空間中的乙個三角形被渲染到螢幕上的例子:

總結:上圖分為兩條路徑,分別為幾何路徑和影象路徑,前者是將3d場景變換成螢幕圖元,而後者是為圖元確定顏色資訊(形象地說就是將影象貼到圖元上);我們可以使用glreadpixers()讀出螢幕framebuffer影象,而glcopypixels()不能被應用讀出,只能將資料拷貝到另乙個framebuffer;使用glrendermode(gl_feedback)可以讀出已變換的vertex data。

OpenGL ES渲染管線

渲染管線 graphics pipeline 在 opengl es 1.0 版本中,支援固定管線,而 opengl es 2.0 版本不再支援固定管線,只支援可程式設計管線。什麼是管線?什麼又是固定管線和可程式設計管線?管線 pipeline 也稱渲染管線,因為 opengl es在渲染處理過程中...

OpenGL ES 渲染管線

頂點著色器是乙個可程式設計的處理單元 執行頂點的變換 透視矩陣 光照 材質的應用等與計算等頂點的相關操作 每個頂點執行一次頂點著色器 opengl es的工作流程為首先將原始的頂點幾何資訊及其他屬性傳送到頂點著色器中 經過頂點著色器處理後產生頂點座標 顏色 位置等後續流程需要的各項定點屬性資訊 然後...

OpenGL ES 3 0 渲染管線介紹

記住下面這張圖,其中帶陰影的方框表示 opengl es 3.0 管線中可程式設計階段。頂點著色器主要進行頂點相關的一些操作。可以用於通過矩陣變換位置 計算照明公式來生成逐頂點顏色以及生成或者變換紋理座標等基於頂點的傳統操作。產生紋理座標 顏色 點位置等資訊送往後續階段。頂點被組合成圖元的過程叫做圖...