OpenGL 是?一種圖形應?用程序編程接?口(Application Programming Interface, API).簡單理理解就是開發(fā)的 圖形庫
OpenGL 本領高強帜讲,涉獵極廣病瞳,使用略麻煩
- 視頻,圖形,圖?片處理理
- 2D/3D 游戲引擎開發(fā)
- 科學可視化
- 醫(yī)學軟件開發(fā)
- CAD(計算機輔助技術)
- 虛擬實境(AR,VR)
- AI ?人?工智能
那么一張圖片顯示出來照皆,到底經過了什么一個過程?(這個過程就叫OPenGL的渲染管線:可以理解為流水線名稱)
頂點數據 ------> 頂點著色器(vertex Shader) -----> 細分著色器 ----->
幾何著色器 -----> 圖元設置 -----> 剪切 ----->
光柵化 -----> 片元著色器 (Fragment Shader) -----> 顯示效果
來看一下細節(jié):
管線
- OpenGL 渲染管線: 一系列有序的處理階段的序列,?于把我們應用中的數據轉化到OpenGL 生成 一個最終的圖像的一個過程碉哑。
- 管線 翻譯白話:管線可以理解為流水線,按照固定的順序進行一個一個執(zhí)行不同的操作
- 圖元: 組成圖像的基本單元.OpenGL中的基本圖元包括 點 , 線 干花,三角形。
-固定管線:
- 主要針對的是著色器Shader楞黄,一個已經封裝好的著色器池凄,開發(fā)者使用時候,只要傳入響應的參數鬼廓,即可迅速完成渲染肿仑,類似系統(tǒng)中封裝好的API,傳入不同參數,實現不同渲染效果尤慰。
- 非固定管線/可編程管線/GLSL:
- GLSL: (OpenGL Shading Language) 專?為圖形開發(fā)設計的編程語?(一般來說就是編寫各個著色器馏锡,語法類似C、C++)
- 頂點數據:
頂點數組(VertexArray)伟端、頂點緩沖區(qū)(VerTex Buffer)杯道。
兩者區(qū)別主要在于存儲方式不同:
- 頂點數組(VertexArray)存儲在內存中
- 頂點緩沖區(qū)(VerTex Buffer) 存儲在GPU提前分配的顯存中
著?器分類:
-頂點著?器(必要):
- 接收頂點數據,確定頂點位置
- 單獨處理理每個頂點(現在并行):處理圖像頂點的變換(旋轉、平移责蝠、縮放)
- 3D圖形數據 投影換算 2D圖形數據
-細分著?器(可選) :
- 全稱: 細分控制著?器 /細分計算著?器党巾。主要是:對所有的圖像進行修改?何圖元類型或者放棄所有的凸緣
-?何著?器 (可選):
- 描述物體的形狀,在管線中生成新的幾何體處理(平順)模型 ?成最終狀態(tài)
-?元著?器 (必選):
- 片元:理解為屏幕中的像素點。
- 片元顏?以及深度值, 然后傳遞到?片元測試和混合 模塊
-> 片元著色器主要用于處理一個個點像素點霜医,例如像素顏色的計算和填充
-> 逐一像素且在GPU并行運行的程序齿拂,即每個像素都會執(zhí)行一次。
- 目前OpenGL中可編程的僅有兩個頂點:頂點著?器支子、?元著?器
-光柵化:
- 輸?入圖元的數學描述,轉化為 與屏幕對應的位置像素?片元, 簡稱(光柵化)
- 頂點數據轉換為片元
- 幾何圖元轉換為二維圖像
- 把物體的數學描述和相關顏色信息轉換為屏幕上對應位置的像素和填充像素的顏色
- 將模擬信號轉換為離散信號
- 這上一個不可編程的過程
作用:將圖轉化為一個個格柵組成的圖像
特點:每個元素對應幀緩沖區(qū)中的一像素
執(zhí)行的操作:
- 確定圖像的像素范圍
- 顏色附著:即分配一個顏色值和一個深度值到各個區(qū)域
-紋理
- 可以理解為圖片:一個增加了不同圖像的圖片创肥,比如地球表面的紋理;
- 添加紋理時候值朋,渲染時候叹侄,可以使得場景更加逼真。
-混合(Blending)
- 簡單理解就是:兩個圖像/圖形相交處的顏色昨登,這個顏色即是兩個圖像/圖形顏色的混合趾代。
-變換矩陣(Transformation)
- 圖形平移、旋轉丰辣、縮放時候使用變換矩陣
-投射矩陣(Projection)
- 將3D坐標轉換為2D屏幕坐標的時候使用
-渲染上屏/交換緩沖區(qū)(Swap Buffer)
- 渲染緩沖區(qū):可以理解為系統(tǒng)的資源撒强。如:窗口
- 渲染上屏:將圖像直接渲染到窗口對應的渲染緩沖區(qū)
面試點:如果每個窗口只有一個緩沖區(qū),在繪制過程中刷新了屏幕笙什,窗口可能顯示不出完成的圖像
-
常規(guī)OpenGL程序至少有兩個緩沖區(qū):
->屏幕緩沖區(qū):用于顯示在屏幕上飘哨。
->離屏緩沖區(qū):沒有顯示在屏幕上。
觸發(fā)離屏渲染:設置圓角 或設置圖層蒙版琐凭、陰影 芽隆、光柵化
- 在一個緩沖區(qū)渲染完成后,將屏幕緩沖區(qū)和離屏緩沖區(qū)進行交換统屈,實現圖像在屏幕上的顯示
面試點:防止交換緩沖區(qū)時屏幕上下區(qū)域的圖像分別屬于兩個不同的幀
- 顯示的刷新一般是逐行進行的胚吁,因此交換一般會等待顯示器完成的信號,在顯示器兩次刷新的間隔中進行交換
->信號:垂直同步信號
->技術:垂直同步技術
面試點:使用了雙緩沖區(qū)和垂直同步技術之后愁憔,由于總是要等緩沖區(qū)交換之后再進行下一幀的渲染腕扶,所以使得幀率無法完全達到硬件允許的最高水平
三區(qū)緩沖技術:
- 在等待垂直同步時,來回交替渲染兩個離屏的緩沖區(qū)
- 垂直同步發(fā)生時吨掌,屏幕緩沖區(qū)和最近渲染完成的離屏緩沖區(qū)交換