OpenGL 渲染流程圖解析

OpenGL 渲染架構(gòu)

OpenGL是使用客戶端(Client)- 服務(wù)器(Server)的形式實(shí)現(xiàn)的,我們編寫的應(yīng)用程序可以看做客戶端,而計(jì)算機(jī)圖形硬件廠商說(shuō)提供的 OpenGL 實(shí)現(xiàn)可以看做服務(wù)端。OpenGL 的某些實(shí)現(xiàn)(例如 X 窗口系統(tǒng)的實(shí)現(xiàn))運(yùn)行服務(wù)端和客戶端在一個(gè)網(wǎng)絡(luò)內(nèi)的不同計(jì)算機(jī)上運(yùn)行。這種情況下,客戶端負(fù)責(zé)提交 OpenGL 命令,這些 OpenGL 命令然后被轉(zhuǎn)換為窗口系統(tǒng)相關(guān)的協(xié)議,通過共享網(wǎng)絡(luò)傳輸?shù)椒?wù)端,服務(wù)端最終執(zhí)行并產(chǎn)生圖像內(nèi)容。

在大多數(shù)現(xiàn)代的實(shí)現(xiàn)方案中,硬件圖形加速器(GPU)被用來(lái)完成大部分的 OpenGL 指令,它往往被構(gòu)建在計(jì)算機(jī)的核心處理器中(不過依然是獨(dú)立的部件),或者作為一個(gè)獨(dú)立的電路板被插到計(jì)算機(jī)主板上。無(wú)論哪種安裝方式,我們都應(yīng)當(dāng)把圖形加速器作為服務(wù)端,把用戶程序作為客戶端來(lái)看待。

OpenGL 渲染流程圖

客戶端 為OpenGL API和調(diào)用API的不同語(yǔ)言代碼,在CPU中執(zhí)行的。
服務(wù)端 為GPU硬件部分,主要由Vertex Shader、Primitive Assembly、Fragment Shader組成。

客戶端在向服務(wù)端傳遞數(shù)據(jù)時(shí),只可以通過三種管道進(jìn)行數(shù)據(jù)傳輸:

  1. Attributes,
  2. Uniforms,
  3. Texture Data,
    他們只是傳輸數(shù)據(jù)的管道,并不是具體的數(shù)據(jù)類型,用來(lái)修飾具體變量的傳輸方式。
1. Attributes

就是對(duì)?個(gè)頂點(diǎn)都要作出改變的數(shù)據(jù)元素。通俗來(lái)講,用來(lái)修飾在 Shader 文件中會(huì)修改的變量,如頂點(diǎn)數(shù)據(jù),紋理坐標(biāo),顏色色值等。

這些屬性對(duì)每個(gè)頂點(diǎn)都要做改變,但并不意味著它們的值不能重復(fù)。通常情況下,它們都是不一樣的,但有可能整個(gè)數(shù)組都是同一值的情況。

2. Uniforms

通過設(shè)置Uniform 變量就緊接著發(fā)送一個(gè)圖元批次處理命令。用 Uniforms 修飾的變量在執(zhí)行一次 Shader 文件中,是不會(huì)發(fā)生改變的,它的改變只有通過下次進(jìn)行圖元處理時(shí),從外部再次傳輸。

  • 與Attributes相同點(diǎn):可以是浮點(diǎn)值、整數(shù)、布爾值
  • 與Attributes不同點(diǎn):Vertex Shader和 Fragment Shader 都可以使用 uniform 變量。uniform 變量還可以是標(biāo)量類型、?量類型、uniform 矩陣。
3. Texture Data

Texture Data用來(lái)傳輸紋理數(shù)據(jù),對(duì)紋理進(jìn)行采樣和篩選。
紋理數(shù)據(jù)的作用不僅僅是表現(xiàn)圖形。很多圖形文件格式都是以無(wú)符號(hào)字節(jié)形式對(duì)顏色分量進(jìn)行存儲(chǔ)的,但我們?nèi)匀豢梢栽O(shè)置浮點(diǎn)紋理。這就是說(shuō),任何大型浮點(diǎn)數(shù)據(jù)塊(例如消耗資源很大的函數(shù)的大型查詢表)都可以通過這種方式傳遞給著色器。

  • 在頂點(diǎn)著?器、?元著?器中都可以對(duì)紋理數(shù)據(jù)進(jìn)行采樣和篩選。
  • 紋理數(shù)據(jù),不僅僅表現(xiàn)在圖形,很多圖形?件格式都是以?符號(hào)字節(jié) (每個(gè)顏?通道8位)形式對(duì)顏色分量進(jìn)?存儲(chǔ)的。
in/out:OpenGL 定義了 in 變量將數(shù)據(jù)拷貝到著色器中,out 變量將著色器中的內(nèi)容拷貝出去。

OpenGL 渲染管線

OpenGL 實(shí)現(xiàn)了我們通常所說(shuō)的渲染管線(rendering pipeline),它是一系列數(shù)據(jù)處理過程,并且將應(yīng)用程序的數(shù)據(jù)轉(zhuǎn)換到最終渲染的圖像。
OpenGL 首先接受用戶提供的幾何數(shù)據(jù)(頂點(diǎn)和幾何圖元),并且將它傳輸?shù)揭幌盗兄麟A段中進(jìn)行處理,這些階段包括頂點(diǎn)著色,細(xì)分著色(它包含兩個(gè)著色器:細(xì)分控制著色器,細(xì)分計(jì)算著色器),以及最后的幾何著色,然后他將被送入光柵化單元(rasterizer)。光柵化單元負(fù)責(zé)對(duì)所有的剪切區(qū)域(clopping region)內(nèi)的圖元生成片元數(shù)據(jù),然后對(duì)每個(gè)生成的片元都執(zhí)行。

OpenGL 渲染管線

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 想要學(xué)習(xí)OpenGL的渲染思想,就需要了解OpenGL中,圖片是怎么渲染到我們所看到的屏幕上的,這個(gè)流程是需要知道...
    Daniel_Harvey閱讀 5,132評(píng)論 0 3
  • OpenGL渲染架構(gòu) 客戶端、服務(wù)端 如上圖所示這里所說(shuō)的客戶端及服務(wù)端并不是傳統(tǒng)意義上的,有分界線區(qū)分上半部分為...
    JunkieBa閱讀 515評(píng)論 0 1
  • 一、OpenGL 基礎(chǔ)圖形管線 1. 管線可以理解為OpenGL渲染圖形圖像的流程 2. 管線分為兩部分 Cl...
    zhongxiaoyue閱讀 1,559評(píng)論 0 1
  • 1.客戶端 server 和 服務(wù)端 client 客戶端是存儲(chǔ)在CPU存儲(chǔ)器中的,并且在應(yīng)用程序中執(zhí)行,或者在主...
    比海更深g丶閱讀 241評(píng)論 0 0
  • 在OpenGL 中,不管是使用可編程管線還是固定管線,它的渲染架構(gòu)都是由兩部分組成:Client 和 Server...
    七天雨閱讀 525評(píng)論 1 0

友情鏈接更多精彩內(nèi)容