1.OpenGL狀態(tài)機(jī)
狀態(tài)機(jī)描述了一個(gè)對象在在其生命周期內(nèi)所經(jīng)歷的各種狀態(tài)。我們可以理解為,狀態(tài)機(jī)是一種行為,它說明了對象在它的生命周期內(nèi)響應(yīng)時(shí)間所經(jīng)歷的狀態(tài)序列以及對狀態(tài)事件的響應(yīng)。
狀態(tài)機(jī)的特點(diǎn):
1.有記憶功能,能記錄當(dāng)前的狀態(tài)
2.可接受輸入,根據(jù)輸入的內(nèi)容和自己原先的狀態(tài),修改當(dāng)前的狀態(tài),并有對應(yīng)輸出
3.當(dāng)進(jìn)入特殊狀態(tài)(停機(jī)狀態(tài))的時(shí)候,會不在接受輸入,停止工作
2.OpenGL 上下文 [context]
在調(diào)用任何OpenGL指令之前,都需要先創(chuàng)建一個(gè)上下文。這個(gè)上線文中包含了一個(gè)龐大的狀態(tài)機(jī),保存了OpenGL的各種狀態(tài),是OpenGL執(zhí)行命令的基礎(chǔ)。切換上下文會產(chǎn)生較大的開銷,因此我們可以創(chuàng)建多個(gè)不同的上下文,讓他們之間共享紋理,緩沖區(qū)等資源,會讓我們的方案更加合理。
3.渲染
將圖形/圖像數(shù)據(jù)轉(zhuǎn)換成3D空間圖像的操作叫做渲染。將計(jì)算機(jī)存儲的二進(jìn)制圖像數(shù)據(jù)轉(zhuǎn)換為我們能看的3D圖像作品。
4.頂點(diǎn)
指的是圖形的頂點(diǎn)位置數(shù)據(jù)。(例如:三角形三個(gè)點(diǎn)的位置數(shù)據(jù),正方體的八個(gè)頂點(diǎn)的位置數(shù)據(jù))
5.頂點(diǎn)數(shù)組
存儲在內(nèi)存當(dāng)中的頂點(diǎn)數(shù)據(jù),被稱為頂點(diǎn)數(shù)組。
6.頂點(diǎn)緩沖區(qū)
頂點(diǎn)數(shù)據(jù)預(yù)先存儲在顯存當(dāng)中,這部分顯存稱作頂點(diǎn)緩沖區(qū)。性能高于頂點(diǎn)數(shù)組。
7.管線
OpenGL在渲染圖形的過程中,會經(jīng)歷一個(gè)一個(gè)節(jié)點(diǎn),這樣的操作可以理解為管線。就像工廠的流水線生產(chǎn)過程,一步一步的按照先后順序執(zhí)行,這個(gè)順序是不能打破的。
8.固定管線
OpenGL封裝了一些固定的shader程序來完成圖形的渲染,開發(fā)者只需要傳入響應(yīng)的參數(shù)即可快速完成圖像的渲染。
9.著色器程序(shader)
將固定管線架構(gòu)變?yōu)榱丝删幊痰匿秩竟芫€。常見的著色器有頂點(diǎn)著色器(VertexShader)、片段著色器(FregFragmentShader)、幾何著色器(GeometryShader)、曲面細(xì)分著色器(TessellationShader)。開發(fā)者可編程的著色器頂點(diǎn)著色器和片段著色器。
10.頂點(diǎn)著色器(VertexShader)
頂點(diǎn)著色器是用于計(jì)算頂點(diǎn)屬性的程序,每個(gè)頂點(diǎn)數(shù)據(jù)都執(zhí)行一次頂點(diǎn)著色器,頂點(diǎn)著色器運(yùn)算過程中無法訪問其他頂點(diǎn)數(shù)據(jù)。一般用來處理圖形頂點(diǎn)變換(旋轉(zhuǎn)/平移/投影等)
11.片段著色器/片元著色器(FregFragmentShader)
一般用來計(jì)算圖形中每個(gè)像素點(diǎn)顏色計(jì)算和填充。每個(gè)像素點(diǎn)都會執(zhí)行一次片段著色器。
12.GLSL(OpenGL Shading Langguage)
是用來在OpenGL中著色編程的語言,在GPU上執(zhí)行。
13.光柵化
就是將一個(gè)幾何圖元變?yōu)槎粓D像的過程。二維圖象上每個(gè)點(diǎn)都包含了顏色、深度和紋理數(shù)據(jù)。
14.紋理
紋理是一個(gè)用來保存圖像顏色元素值的OpenGL ES緩存,可以理解為圖片/圖像,在渲染圖形的時(shí)候需要在其編碼填充圖片,為了使得場景更加逼真,在這里使用紋理。
15.混合(Blending)
在OpenGL中,混合通常是實(shí)現(xiàn)物體的透明度的一種技術(shù),透明就是說一個(gè)物體并不是純色的,它的顏色是它物體本身的顏色和它背后的其他物體的顏色的不同程度的結(jié)合。比如我們可以混合多個(gè)顏色為一種顏色,三原色紅綠藍(lán)和在一起之后就是黑色。
在測試階段之后,如果像素依然沒有被剔除,那么像素的顏色將會和幀緩沖區(qū)中顏色附著上的顏色進(jìn)行混合。
16.變換矩陣(Transformation)
在圖形繪制過程中,有三種變換,分別是平移,縮放,旋轉(zhuǎn)。就需要使用變換矩陣。
17.投影矩陣(Projection)
用于將3D坐標(biāo)轉(zhuǎn)換為二維屏幕坐標(biāo),實(shí)際線條也將在二維坐標(biāo)下進(jìn)行繪制。
18.渲染上屏/交換緩沖區(qū)(SwapBuffer)
渲染緩沖區(qū)一般映射的是系統(tǒng)的資源比如窗口。如果將圖像直接渲染到窗口對應(yīng)的渲染緩沖區(qū),則可以將圖像顯示到屏幕上。要注意的是,如果每個(gè)窗口只有一個(gè)緩沖區(qū),那么在繪制過程中屏幕進(jìn)行了刷新,窗口可能顯示出不完整的圖像。
為了解決這個(gè)問題,常規(guī)的OpenGL程序至少都會有兩個(gè)緩沖區(qū)。顯示在屏幕上的稱為屏幕緩沖區(qū),沒有顯示的稱為離屏緩沖區(qū)。在一個(gè)緩沖區(qū)渲染完成之后,通過將屏幕緩沖區(qū)和離屏緩沖區(qū)交換,實(shí)現(xiàn)圖像在屏幕上的顯示。
由于顯示器的刷新一般是逐行進(jìn)行的,因此為了防止交換緩沖區(qū)的時(shí)候屏幕上下區(qū)域的圖像分屬于兩個(gè)不同的幀,因此交換一般會等待顯示器刷新完成的信號,在顯示器兩次刷新的間隔中進(jìn)行交換,這個(gè)信號就被稱為垂直同步信號,這個(gè)技術(shù)被稱為垂直同步。