OpenGL ES
什么是 OpenGL ES?
OpenGL ES(OpenGL for Embedded Systems)是 OpenGL 三維圖形API的子集糯景,針對手機(jī)省骂、PDA和游戲主機(jī)等嵌入式設(shè)備而設(shè)計(jì),各顯卡制造商和系統(tǒng)制造商來實(shí)現(xiàn)這組 API怠惶。
OpenGL 基本概念
因?yàn)?OpenGL ES 是 OpenGL 的一個子集,所以下面就主要介紹一些有關(guān) OpenGL 的一些基本概念。
OpenGL 的結(jié)構(gòu)可以從邏輯上劃分為下面 3 個部分:
- 圖元(Primitives)
- 緩沖區(qū)(Buffers)
- 光柵化(Rasterize)
圖元(Primitives)
在 OpenGL 的世界里览妖,我們只能畫點(diǎn)揽祥、線拄丰、三角形這三種基本圖形,而其它復(fù)雜的圖形都可以通過三角形來組成奄侠。所以這里的圖元指的就是這三種基礎(chǔ)圖形:
- 點(diǎn):點(diǎn)存在于三維空間载矿,坐標(biāo)用(x,y,z)表示。
- 線:由兩個三維空間中的點(diǎn)組成闷盔。
- 三角形:由三個三維空間的點(diǎn)組成弯洗。
緩沖區(qū)(Buffers)
OpenGL 中主要有 3 種 Buffer:
幀緩沖區(qū)(Frame Buffers) 幀緩沖區(qū):這個是存儲
OpenGL 最終渲染輸出結(jié)果的地方
,它是一個包含多個圖像的集合逢勾,例如顏色圖像牡整、深度圖像、模板圖像等溺拱。渲染緩沖區(qū)(Render Buffers) 渲染緩沖區(qū):渲染緩沖區(qū)就是一個圖像逃贝,它是 Frame Buffer 的一個子集。
緩沖區(qū)對象(Buffer Objects) 緩沖區(qū)對象就是程序員輸入到 OpenGL 的數(shù)據(jù)盟迟,分為結(jié)構(gòu)類和索引類的秋泳。前者被稱為“
數(shù)組緩沖區(qū)對象
”或“頂點(diǎn)緩沖區(qū)對象
”(“Array Buffer Object”或“Vertex Buff er Object”),即用來描述模型的數(shù)組攒菠,如頂點(diǎn)數(shù)組、紋理數(shù)組等辖众; 后者被稱為“索引緩沖區(qū)對象
”(“Index Buffer Object”)卓起,是對上述數(shù)組的索引。
光柵化(Rasterize)
在介紹光柵化之前凹炸,首先來補(bǔ)充 OpenGL 中的兩個非常重要的概念:
-
頂點(diǎn)(Vertex) 就是
圖形中頂點(diǎn)
戏阅,一系列的頂點(diǎn)就圍成了一個圖形。 -
片元(Fragment) 是三維空間的點(diǎn)啤它、線奕筐、三角形這些基本圖元映射到二維平面上的
映射區(qū)域
舱痘,通常一個 Fragment 對應(yīng)于屏幕上的一個像素,但高分辨率的屏幕可能會用多個像素點(diǎn)映射到一個 Fragment离赫,以減少 GPU 的工作芭逝。
而光柵化是把點(diǎn)、線渊胸、三角形映射到屏幕上的像素點(diǎn)的過程旬盯。
著色器程序(Shader)
Shader 用來描述如何繪制(渲染),GLSL 是 OpenGL 的編程語言翎猛,全稱 OpenGL Shader Language胖翰,它的語法類似于 C 語言。OpenGL 渲染需要兩種 Shader:Vertex Shader
和 Fragment Shader
切厘。
-
頂點(diǎn)著色器(Vertex Shader) 對于3D模型網(wǎng)格的每個頂點(diǎn)執(zhí)行一次萨咳,主要是確定該
頂點(diǎn)的最終位置
。 -
片元著色器(Fragment Shader) 對光柵化之后2D圖像中的每個像素處理一次迂卢。3D物體的表面
最終顯示成什么樣
將由它決定某弦,例如為模型的可見表面添加紋理,處理光照而克、陰影的影響等等靶壮。
OpenGL 流水線
OpenGL 中有兩種流水線,一種是固定流水線
员萍,另外一種則是可編程流水線腾降。
其中,OpenGL 1.0 版本支持固定流水線碎绎。
從OpenGL 2.0版本開始螃壤,OpenGL支持可編程的流水線
。也就是說筋帖,程序員可以通過Shader(一種程序)來控制GPU渲染的過程奸晴。