介紹5---OpenGL Pipeline

之前講述的都是將OpenGL Pipeline當中一個整體來看的,接下去,我們開始探索其內部了。

 

x

 

一. 頂點處理

三維空間中的物體,從幾何角度來說,是由多個頂點構成的,所以OpenGL Pipeline的第一個步驟就是頂點處理。計算每個頂點的屬性,比如這個頂點在當前光照條件下應該是什麼顏色的,在當前的視野下應該做的座標變換等等。在這個步驟,每個頂點都是被獨立處理的,不存在相互依賴關係。本階段的輸出還是頂點。

 

二. 圖元處理

三維空間中的物體,從幾何角度來說,可以分解成點、線段、三角形等,我們稱這些基礎形狀爲圖元Primitive。在這個階段,頂點組合成圖元,確定這些圖元是面向觀察者還是背向觀察者,如果圖元部分在視野範圍之外,那要進行相應的裁剪,即去除看不見的頂點,引入新的邊界處頂點,組成數個新的圖元等等。本階段的輸出是由頂點組成的圖元包括點、線段和三角形。

 

三. 光柵化

最終的繪製效果是我們在顯示器上看到的一個個像素pixel,所以,我們還需要將圖元光柵化,光柵化的結果是多個fragment,fragment和像素在位置上一一對應,只是具有更多的屬性。有時候,我們會將Fragment和像素混用。

-點: 根據點的大小,計算出這個點包括哪幾個像素

-線: 根據線長和線寬,計算最終屏幕上的哪些像素可以表現出這個線段

-三角形:根據三個頂點,計算被此三角形覆蓋的像素

 

對每個被光柵化出來的像素/fragment,根據此像素和頂點的幾何關係,將頂點數據進行插值,即得到fragment的諸如位置座標、顏色等屬性的值。例如下圖,三角形ABC中被光柵化出來的像素D點,D點的屬性值由ABC三點線性插值而來,假如D點是三角形重心,則D點的各種屬性的值是(A點值+B點值+C點值)/3。

 

圖.

 

【擴展】插值並不只是簡單的線性加權,可能會涉及到是否perpspective-correct的考慮,在此簡化爲線性插值。

 

四. Fragment處理

Fragment處理的數據量遠超過頂點處理環節,因爲頂點處理環節只處理圖元關鍵的頂點,而Fragment處理環節則是處理被該圖元覆蓋的所有像素,最主要功能是改變像素的顏色值。在這個步驟,每個像素都是被獨立處理的,不存在相互依賴關係。本階段的輸出還是像素。

 

五. FrameBuffer處理

本環節處理的還是fragment,只是,還需要考慮最終frame buffer中的數據,決定對fragment的取捨修改等。

 

六. 2D處理

OpenGL除了定義3D操作外, 實際上還定義了2D操作,諸如對字體、位圖等的支持。

 

【說明】諸如evaluator、selection、feedback、display lists用的並不廣泛,將被省略。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章