OpenGL渲染管线,着色器,光栅化等概念理解
生活随笔
收集整理的這篇文章主要介紹了
OpenGL渲染管线,着色器,光栅化等概念理解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
臥槽,前些日子看這幾個概念就十分想吐槽,這么難理解的概念竊以為純屬翻譯的不夠接地氣。
————
首先,光柵化(Rasterize/rasteriztion)。
這個詞兒Adobe官方翻譯成柵格化或者像素化。沒錯,就是把矢量圖形轉化成像素點兒的過程。我們屏幕上顯示的畫面都是由像素組成,而三維物體都是點線面構成的。要讓點線面,變成能在屏幕上顯示的像素,就需要Rasterize這個過程。就是從矢量的點線面的描述,變成像素的描述。
如下圖,這是一個放大了1200%的屏幕,前面是告訴計算機我有一個圓形,后面就是計算機把圓形轉換成可以顯示的像素點。這個過程就是Rasterize。
<img data-rawheight="192" data-rawwidth="381" src="https://pic4.zhimg.com/37b99f0d42dfc4b15468b873c1b6b487_b.jpg" class="content_image" width="381">
————
渲染管線(Pipeline)
這個翻譯尤其不接地氣,兼職就是直譯(pipe管子line線路)。Pipeline是輸送管道的意思。其實是指三維渲染的過程中顯卡執行的、從幾何體到最終渲染圖像的、數據傳輸處理計算的過程。
————
著色器(Shader)
這個翻譯的挺好。畫畫的時候我們經常有這么一個過程:先打線稿,再上色。著色器就是用來做這個工作的。
通常著色器分兩種:
1頂點著色器(vertex shader)這個是告訴電腦如何打線稿的——如何處理頂點、法線等的數據的小程序。
2片面著色器(fragment shader)這個是告訴電腦如何上色的——如何處理光、陰影、遮擋、環境等等對物體表面的影響,最終生成一副圖像的小程序。
采用了這兩種著色器小程序 的 數據傳輸處理計算的渲染過程,稱之為 可編程管線。
作者:youi xiao
鏈接:http://www.zhihu.com/question/29163054/answer/46610969
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
通俗點說,你告訴GL我要畫條線,然后告訴他線兩個端點的坐標是(0,0)和(0,10),那么GL自動腦補出中間10個點的坐標,這個過程就叫光冊化,腦補的方法叫線性差值.
復雜點,現在我要畫個三角形,給他三個頂點的坐標,它會計算出里面所有像素的坐標.
再復雜點,我不只給頂點坐標了,我告訴他(0,0)點是白色,(0,10)點是黑色,那么光冊化就自動計算出中間10個點每個點的顏色,自動做過渡的效果.這個計算方法還是線性差值.
繼續通俗,線性差值也沒啥,小學算數罷了,誰都會. 不懂就自己計算如上10個點的坐標,計算過程就是線性差值. 沒錯,就這么簡單.
著色器分兩個部分,一個頂點,一個片斷,中間就是光冊化.
也就是先頂點處理,計算出每個頂點的坐標,顏色,紋理坐標等等,也可以是任何其它千奇百怪的東西(壽命,溫度,身高,婚否,飯量………). 然后經過光冊化,給他們差值.最后片斷階段,你會獲得每個像素的坐標,顏色,紋理,壽命,溫度……
初學階段,你可以把片斷(fragment)理解成像素,其實意思差別不大,等你GL入門了,自然就理解這倆詞有啥區別了(ps:最討厭那些拽詞的,明明意思差不多,為了自己裝逼就非說倆詞怎么怎么不一樣,一點不考慮初學者的感受)
粗略地講:你模型的那些頂點在經過各種矩陣變換后也僅僅是頂點。而由頂點構成的三角形要在屏幕上顯示出來,除了需要三個頂點的信息以外,還需要確定構成這個三角形的所有像素的信息。光柵化就是干這個的:
[本圖出自D3D Functional Specification,鏈接自zol上顧杰的文章]
光柵化會根據三角形頂點的位置,來確定需要多少個像素點才能構成這個三角形,以及每個像素點都應該得到哪些信息,比如uv坐標該是什么...等。這是通過對頂點數據進行插值來完成的。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的OpenGL渲染管线,着色器,光栅化等概念理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hbase RegionServer 启
- 下一篇: Delta3d组件以及消息机制