1.3 可程式設計渲染管線
目錄
- 從固定到可程式設計
- 探祕GPU渲染管線
- 著色器程式設計
- 實驗導學
- 實驗
從固定到可程式設計
圖形程式設計的發展
早期圖形程式設計:
與具體硬體有關,不可移植;用來繪製圖元及其屬性的函式庫低階;程式設計師雖然擁有很大的控制權,但耗費時間
圖形標準的產生:
硬體供貨商提供標準圖形函式庫;GKS、PHIGS、OPENGL;裝置無關
固定管線
圖形API提供了一個對硬體操作的標準介面;API對程式設計師提出的各種繪製圖元或屬性的請求都採用固定的方式來處理;這種內部實現方式被稱為“固定功能渲染流水線”;程式設計師控制權減少,更方便
固定到可程式設計:
勾函式hooks的出現:突破固定功能流水線的限制,使用可程式設計著色器
GPU渲染管線
渲染管線的功能:決定在給定虛擬相機、三維物體、光源、照明模式,以及紋理等諸多條件的情況下生成或繪製一幅二維影象的過程。
GPU渲染管線的三個概念階段
應用階段--->幾何階段--->光柵化階段
探祕GPU渲染管線
GPU渲染管線
幾何階段:頂點著色器、幾何/曲面著色器、剪裁、螢幕對映
光柵化階段:三角形設定、三角形遍歷、片元著色器、片元操作
幾何階段
頂點著色器:模型變換、檢視變換、頂點著色
- 頂點著色:確定頂點上材質的光照效果。在每個頂點儲存各種材料資料。(形式多樣:顏色、姓樑、紋理座標等)
幾何著色器、曲面細分著色器:頂點增刪、曲面細分
裁剪:規範化投影變換、裁剪
透視投影的觀察空間-->規範化的觀察空間
螢幕對映
z值並不會丟失,之後會具體講解
小結
模型變換和檢視變換有頂點著色器完成,投影變換由剪裁完成,螢幕對映最後進行得到螢幕座標系。
光柵化階段
片元操作:模板測試、深度測試、顏色混合、幀快取(較複雜,之後會講)
著色器程式設計
著色器語言
上面這個Phong模型會在第九章進行學習
GLSL
OpenGL的著色器語言GLSL,OpenGL Shading Language。
最新版本中有以下著色器
- 頂點著色器 Vertex Shader
- 幾何著色器 Geometry Shader(可選)
- 曲面細分著色器 Tessellation Shader(可選)
- 片元著色器 Fragment Shader
著色器語言在CPU中不編譯,以文字方式存在,由GPU顯示卡驅動完成翻譯
OpenGL中使用著色器的流程
- 建立著色器物件
- 原始碼關聯到著色器物件
- 編譯著色器
- 建立一個程式物件
- 將著色器物件關聯到程式物件
GLSL與OpenGL的通訊
資料型別
標量、向量、矩陣、結構和陣列
控制結構
類似C語言
EBO、VBO和VAO
EBO索引緩衝區物件,這個緩衝區用來儲存頂點的索引資訊。
VBO頂點緩衝區物件,主要用來儲存頂點的各種資訊。
VAO頂點陣列物件,儲存了所有頂點資料屬性的狀態集合。儲存了頂點資料的格式以及頂點資料所需的VBO物件的引用。
例程
在開發環境下編寫並精讀。
實驗
實驗導學