1. 一個以三角形渲染為例的簡單架構圖
1.1 客戶端-服務器
- 上面的管線分成了
客戶端
和服務器端
追逮。 -
客戶端
是存儲在CPU存儲器中的盐数,并在應用程序
或者在內存的驅動程序
中執(zhí)行蜒滩。驅動程序將渲染命令和數(shù)據(jù)組合起來
岩调,發(fā)送給服務器執(zhí)行。 -
客戶端
不斷的將數(shù)據(jù)塊和命令組合起來送入緩沖區(qū)盐肃,緩存區(qū)會發(fā)送到服務器端執(zhí)行爪膊。服務器端
將執(zhí)行這些緩沖區(qū)的內容,客戶端又做好了下一次發(fā)送渲染數(shù)據(jù)和命令的準備恼蓬。
1.2 著色器
- 著色器使用的是GLSL編寫的語言惊完,著色器必須從源代碼中
編譯和鏈接
到一起才能使用,最后準備就緒的著色器程序在第一階段構成頂點著色器
处硬,第二階段構成片段著色器
小槐。實際上還有一種幾何著色器
在兩者之間,用來反饋來回傳遞的數(shù)據(jù)荷辕。 - 頂點著色器處理從客戶端傳遞的數(shù)據(jù)凿跳,應用變換、計算光照效果疮方、位移控嗜、顏色值。
渲染一個三個頂點的三角形的步驟:
頂點著色器執(zhí)行三次骡显,這三次是同時進行的疆栏。
圖元組合將三個頂點組合在一起。
對三角形逐個片段進行光柵化惫谤。
每個片段通過片段著色器進行填充壁顶。
片段著色器輸出我們在屏幕上看到的最終的顏色值。
1.3 為著色器提供數(shù)據(jù)的三種方式
1.3.1 屬性
- 常用屬性傳遞的數(shù)據(jù):
頂點數(shù)據(jù)
溜歪、顏色值
若专、紋理坐標
、光照計算法線
- 屬性就是一個對每個頂點都要做改變的數(shù)據(jù)元素
- 屬性總是以四維向量的形式進行內部存儲
- 屬性會從本地客戶端內存中復制存儲在圖像硬件中的一個緩沖區(qū)中
- 屬性只供頂點著色器使用蝴猪,對片段著色器沒有意義
1.3.2 Uniform值
- Uniform的值經(jīng)常改變的
- Uniform最常見的應用是在頂點渲染中設置變換矩陣
- 頂點著色器和片段著色器都可以有Uniform變量
1.3.3 紋理
- 頂點著色器和片段著色器都可以對紋理值進行采樣和處理
- 片段著色器對一個紋理進行采樣调衰,并在三角形表面上應用圖形數(shù)據(jù)
- 紋理數(shù)據(jù)的作用不僅僅是表現(xiàn)圖形
- 任何大型浮點數(shù)據(jù)塊都可以通過紋理傳給著色器
1.3.4 輸出
- 輸出類型可以簡單的從上一個階段傳遞到下一個階段,也可以以不同的方式插入
2. OpenGL注意
由于OpenGL是基于C的API,因此它非常便攜且受到廣泛支持自阱。作為C API嚎莉,它與基于Objective-C的Cocoa應用程序無縫集成。OpenGL提供應用程序用于生成2D或3D圖像的函數(shù)动壤。您的應用程序將渲染的圖像呈現(xiàn)給屏幕或將它們復制回自己的內存萝喘。
OpenGL規(guī)范沒有提供自己的窗口層。它依賴于OS X定義的功能來將OpenGL繪圖與窗口系統(tǒng)集成琼懊。您的應用程序創(chuàng)建OS X OpenGL渲染上下文并將渲染目標附加到其上(稱為可繪制對象)阁簸。渲染上下文管理OpenGL狀態(tài)更改和通過調用OpenGL API創(chuàng)建的對象。