openGL渲染流程

渲染管線

  • GPU百科大全
  • openGL 是一套軟件技術(shù), 它采用 C(CPU)S(GPU) 結(jié)構(gòu), c 是給 s 傳遞頂點(diǎn)和紋理信息的, s 主要用來顯示圖像


渲染流程詳細(xì)介紹

  • 流程圖


    OpenGL ES 3.0編程指南
  • GPU 首先從 vertex buffer 中讀取數(shù)據(jù),然后通過 vertex shader 計(jì)算出各個(gè)頂點(diǎn)的具體位置

  • 通過圖元組裝基本構(gòu)成一個(gè)骨架

  • 因?yàn)槠聊簧现挥卸S坐標(biāo)系, 所以后續(xù)的操作是把三維的坐標(biāo)系光柵化為二維
    - 然后通過 fragment shader 映射出各個(gè) vertex 所對(duì)應(yīng)的像素值

  • 當(dāng)所有東西都準(zhǔn)備好的時(shí)候把這些信息渲染到幀緩存中等待顯示

各種名詞的解析

- VBO( Vertex Buffer Object ) / VAO (Vertex Array Object)
VBO 其實(shí)是用來存放頂點(diǎn)的緩沖區(qū), VAO 是用來提高效率而誕生的,因?yàn)槿绻看?CPU 向 GPU 傳遞相同的數(shù)據(jù)會(huì)浪費(fèi)很多不必要的性能, 因此 VAO 通過記錄一系列頂點(diǎn)的狀態(tài)來達(dá)到?jīng)]必要每次都要傳遞相同的數(shù)據(jù)給 GPU 提高性能

  • vertex shader
    屏幕上每個(gè)頂點(diǎn)都會(huì)通過 vertex shader 計(jì)算出具體的位置, 因此我們需要在這里可以使用相關(guān)的數(shù)學(xué)知識(shí)來達(dá)到我們想要的效果

  • 圖元組裝
    圖元是一個(gè)個(gè)三角形把頂點(diǎn)著色器輸出的頂點(diǎn)組合成圖元。

  • rasterization (光柵化)
    光柵化是將圖元轉(zhuǎn)化為一組二維片段的過程,然后,這些片段由片段著色器處理(片段著色器的輸入)。這些二維片段代表著可在屏幕上繪制的像素。用于從分配給每個(gè)圖元頂點(diǎn)的頂點(diǎn)著色器輸出生成每個(gè)片段值的機(jī)制稱作插值(Interpolation)。這句不是人話的話解釋了一個(gè)問題,就是從cpu提供的分散的頂點(diǎn)信息是如何變成屏幕上密集的像素的,圖元裝配后頂點(diǎn)可以理解成變?yōu)閳D形,光柵化時(shí)可以根據(jù)圖形的形狀,插值出那個(gè)圖形區(qū)域的像素(紋理坐標(biāo)v_texCoord、顏色等信息)。注意,此時(shí)的像素并不是屏幕上的像素,是不帶有顏色的。接下來的片段著色器完成上色的工作。

  • FragmentShader
    根據(jù)紋理的頂點(diǎn)坐標(biāo),從烘培好的紋理中采樣對(duì)應(yīng)頂點(diǎn)所對(duì)應(yīng)的紋理

  • helloWorld sample
    openGLES-turorial-01-helloworldtriangle

最后編輯于
?著作權(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)容

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