OpenGL 簡介


OpenGL 簡介

1. OpenGL 全稱Open Graphics Library,是一個跨平台的第三方圖形繪制庫,可以用來繪制各種2D和3D圖形,像去年很火的全景和VR的視頻渲染,都是用到它
 
2. 由於GPU 具有高並行結構(highly parallel structure),所以GPU 在處理圖形數據和復雜算法方面擁有比CPU 更高的效率。 如下圖CPU 大部分面積為控制器和寄存器,與之相比,GPU 擁有更多的ALU(Arithmetic Logic Unit,邏輯運算單元)用於數據處理,而非數據高速緩存和流控制,這樣的結構適合對密集型數據進行並行處理。

 

 
 
3. GPU圖形繪制管線由四個階段組成:幾何階段,圖元裝配,光柵化階段,圖形硬件。
 
3.1 幾何階段,主要負責頂點坐標變換、光照、裁剪、投影以及屏幕映射,幾何階段主要由局部坐標系轉換到世界坐標,再轉換到視坐標,最后經過裁剪到屏幕坐標
局部空間
  • 物體所在的坐標空間,用建模軟件(3DMAX)導出來的坐標
  • 模型的所有頂點都是在局部空間:相對於物體來說是局部的
  • 與其他物體沒有任何參照關系 
 
世界空間
  • 以固定的坐標位置為原點
  • 當物體導入程序中時,每個物體在世界空間的位置不盡相同
  • 物體坐標從局部空間轉換到世界空間
 
觀察空間
  • 每個人從自己的角度出發,看到了不同的世界
  • 攝像機的視角觀察到的空間
 
裁剪空間
  • 期望所有的坐標落在一個特定的范圍,不在的被裁剪掉
  • 由投影矩陣(Projection Matrix)指定的坐標范圍
  • 平截頭體(Frustum)
  • 正射投影、透視投影
正射投影(物體大小不改變)

 

 
透視投影(近大遠小)
 
 

 

視錐體(Field of View)

 

 
透視投影和正交投影對比
 
 

 

 
幾何階段轉換示意圖
 

 

 
 
3.2 圖元裝配
 
  • 將頂點根據原始的連接關系還原出網格結構
  • 根據索引將頂點鏈接在一起,組成線,面單元
  • 對這些單元背面剔除、視域剔除
  • 最后經過Triangle Setup得到三角面片,用於光柵化
 
3.3 光柵化
 
  • 決定哪些像素被集合圖元覆蓋的過程
  • 點的屏幕坐標浮點數 => 像素是整數 (10.4,20.5)=>(?,?)
  • 根據兩個點繪制線段,3個點繪制三角形面片;畫線算法,區域圖元填充算法
 
      Pixel Operation:
 
  • 計算出每個像素的顏色值
  • 消除遮擋面
  • 紋理操作,也就是根據像素的紋理坐標,查詢對應的紋理值 
  • 混色:根據目前已經畫好的顏色,與正在計算的顏色的透明度(Alpha), 混合為兩種顏色,作為新的顏色輸出 
  • Filtering:將正在算的顏色經過 種 Filtering(濾波或者濾鏡)后輸出

 

 
3.4 圖形硬件
 
  • Z buffer,視點到每個像素所對應的空間點的距離,根據Z值大小,判斷空間點的遮擋關系 
  • Stencil buffer,一個額外的 buffer,通常附加到z buffer中,如15位的z buffer加上1位的stencil buffer顯存中共享同一片區域 
  • Frame buffer,存放顯示輸出的數據,color buffer和z buffer的組合
 
4. 着色語言
 
  • 賦予程序員靈活而方便的編程方式 
  • 盡可能的控制渲染過程,同時利用圖形硬件的並行性,提高算法的效率
  • OpenGL 的 GLSL
  • Direct3D 的 HLSL(High Level Shading Language)
  • NVIDIA 公司的 Cg (C for Graphic)
  • 語言是外殼,算法才是精髓
APP(應用程序)通過Programmable Vertex Processor和Programmable Fragment Processor控制渲染階段
 
4.1 頂點着色器
 
  • 從 GPU 前端模塊(寄存器)中 取圖元信息(頂點位置、法 向量、紋理坐標等)
  • 完成頂點坐標空間轉換、法向量空間轉換、光照計算等 操作,
  • 將計算好的數據傳送到指定寄存器中
 

 

 
4.2 片段着色器
 
  • 從上一步中獲取需要的數據,通常為“紋理坐標、光照信息等”
  • 根據這些信息以及從應用程序傳遞的紋理信息(如果有的話)進行每個片斷的顏色計算
  • 將處理后的數據送 光柵操作模塊 
  • 片斷就是所有的三維頂點 在光柵化之后的數據集合,這些數據還沒有經過深度值比較,而屏幕顯示的像素 都是經過深度比較的
 
4.3 頂點和片段結合圖
每個頂點數據都會執行一次頂點程序
每個片段都會執行一次片段程序 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM