OpenGL-渲染管线的流程(有图有真相)
視頻教程請關(guān)注?http://edu.csdn.net/lecturer/lecturer_detail?lecturer_id=440
學(xué)習(xí)shader之前必須知道的事情,shader(著色語言)到底發(fā)生在那個階段, OpenGL的渲染管線有哪些階段
對開發(fā)人員來說很重要,也許你剛剛接觸,或者你在使用已有的產(chǎn)品,很優(yōu)秀的游戲引擎,或者渲染引擎,你
覺得知道這個沒有太大意義,但知道了這些,總歸對你沒有壞處。
?
下圖是一個非常簡化框圖流水線的各個階段,并在他們之間傳播的數(shù)據(jù)。雖然極其簡單,它是足夠的著色器編程,
提出了一些重要的概念。固定管線中存在很多階段,并存在很多細(xì)節(jié),這里只是粗略的介紹。
(1)頂點變換:
在這里,一個頂點的屬性,如在空間的位置,以及它的顏色,法線,紋理坐標(biāo),其中包括一組。這個階段的輸入
的各個頂點的屬性。由固定的功能所執(zhí)行的操作,主要完成一下工作:
1. 頂點位置變換
2. 計算頂點觀照
3. 紋理坐標(biāo)變換
(2)圖元裝配:
? ? 這個階段的輸入的變換后的頂點,以及連通性信息。這后者的一塊數(shù)據(jù)告訴頂點如何連接,以形成一種原始的
繪制數(shù)據(jù),這個階段還負(fù)責(zé)對視錐裁剪操作,背面剔除。光柵掃描確定的片段,和原始的像素位置。
在此上下文中的片段是一塊的數(shù)據(jù),將用于更新的像素在幀緩沖區(qū)中,在特定的位置。片段包含不僅是顏色,
也法線和紋理坐標(biāo),其中包括可能的屬性,被用來計算新像素的顏色。上面的頂點變換階段,計算出的值與頂點連接信息相結(jié)合,
允許當(dāng)前階段來計算相應(yīng)的屬性的片段。比如,每個頂點的變換位置。當(dāng)考慮到頂點,使一個原語,
是可以計算的原始片段的位置。另一個例子是,使用的顏色。如果一個三角形,然后用不同的顏色有其頂點的顏
色的三角形內(nèi)的片段片段的相對的頂點的距離加權(quán)的三角形的頂點的顏色插值的方式獲得。
(3)紋理映射,著色:
插值片段信息是這一階段的輸入。彩色已經(jīng)在前一階段的計算是通過內(nèi)插法,在這里,它可以結(jié)合例如一個紋理像素(紋理元素)。
紋理坐標(biāo)也已經(jīng)在前一階段內(nèi)插。霧也適用于在這個階段。每個片段的本階段的共同的最終結(jié)果是一個顏色值和深度的片段。
(4)最后階段的管道上的片段,進(jìn)行了一系列的測試:
1.?裁減測試
? ? ? 2.Alpha(透明度)測試
? ? ? 3.模板測試
? ? ? 4.深度測試
通過測試的片段信息,然后用于更新的像素的值,根據(jù)當(dāng)前的混合模式。請注意,混合只發(fā)生在這個階段,因為片段紋理和著色階段,
有沒有訪問幀緩沖區(qū)。幀緩沖區(qū)是唯一能夠在這個階段。
下圖很明了的說明了各個階段的任務(wù):
最后這個圖畫 的比較丑,大家見諒(ps 基本屬于文盲),鑒于本人能力有限,對各個階段的理解如有不錯誤
還請指教。
? ?最后,到shader上場了,shader具體在那個階段呢(現(xiàn)在的shader已經(jīng)出到第四版本了,增加了很多新功能)
vertex shader(頂點shader)發(fā)生在頂點變換階段,通過頂點shader可以修改一些基本的圖元屬性,顏色,光照,發(fā)現(xiàn)等
fragment shader(片段shader)主要發(fā)生在 紋理著色階段,主要是對上一階段輸出的數(shù)據(jù),進(jìn)行再次加工。
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/zhanglitong/p/3238989.html
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的OpenGL-渲染管线的流程(有图有真相)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c#一个分页控件的例子
- 下一篇: C++实现全局鼠标、键盘消息hook,支