1. OpenGL圖形專有名詞、坐標(biāo)解析

一、名詞解析:

1. Context(上下文):

調(diào)用OpenGL之前需要創(chuàng)建一個context上下文,context就是一個狀態(tài)機,記錄OpenGL中各種配置的狀態(tài)。

  • 狀態(tài)機:
    • 有記憶功能,能記住當(dāng)前的狀態(tài);
    • 可以接收輸入,根據(jù)輸入的內(nèi)容和當(dāng)前狀態(tài),改變自己的狀態(tài),并產(chǎn)生輸出;
    • 當(dāng)進入特殊狀態(tài)(停機狀態(tài)),便不再接收輸入,停止工作。
  • OpenGL狀態(tài)機:
    • 可以記錄當(dāng)前的狀態(tài)(比如使用的顏色、是否開啟混合等);
    • 可以接收輸入(如調(diào)用OpenGL的函數(shù)進行傳參);
    • 可以進入停止?fàn)顟B(tài),不再接收輸入。

2. 渲染:

將圖形、圖像顯示在屏幕上的過程就是渲染(Rendering)。

3. 頂點數(shù)組(VertexArray)、頂點緩沖區(qū)(VertexBuffer):

  • 圖形圖像的頂點位置數(shù)據(jù)的數(shù)組存儲在內(nèi)存中,這就是頂點數(shù)組;
  • 渲染過程中,在內(nèi)存中獲取頂點數(shù)據(jù)效率低,所以更高效的做法是存儲在顯存中,這就是頂點緩沖區(qū)。

4. 著色器(Shader):

著色器就是對GPU編程的代碼段,類似于平時寫的函數(shù)(對CPU編程的代碼段)。

  • 分類:
    • 頂點著色器(VertexShader)
    • 片元著色器(FragmentShader)/像素著色器(PixelShader): 這兩種名稱只是在OpenGL和DirectX中的不同叫法而已。
    • 幾何著色器(GeometryShader)
    • 曲面細(xì)分著色器(TessellationShader)
  • OpenGL在處理Shader時,和其他編譯器一樣。通過編譯、鏈接等步驟生成著色器程序(glProgram),著色器程序同時包含頂點著色器和片元著色器的運算邏輯。OpenGL進行繪制時:
    • 首先由頂點著色器對傳入的頂點數(shù)據(jù)進行運算;
    • 再通過圖元裝配,將頂點轉(zhuǎn)換為圖元;
    • 然后進行光柵化,將圖元這種矢量圖形,轉(zhuǎn)換為柵格化數(shù)據(jù);
    • 最后,將柵格化數(shù)據(jù)傳入片元著色器進行運算,片元著色器對柵格化數(shù)據(jù)中的每一個像素進行運算,并決定像素的顏色。

5. 管線:

OpenGL渲染圖形時,會經(jīng)歷一個一個的節(jié)點,而且每個節(jié)點的先后順序是固定的,類似于流水線,所以稱之為管線。

  • 固定管線、存儲著色器:早期的OpenGL版本,內(nèi)置了很多固定的shader程序,開發(fā)者只需傳入相應(yīng)的參數(shù),就能快速實現(xiàn)圖形渲染(也就是只能調(diào)用,無法自定義);
  • 由于OpenGL的使用場景非常豐富,固定管線或存儲管線無法滿足現(xiàn)有的場景,這時將相關(guān)部分開放成可編程。

6. 頂點著色器(VertexShader):

  • 一般用來處理圖形每個頂點的變換(平移、旋轉(zhuǎn)、投影等);
  • 頂點著色器是OpenGL中用于計算頂點屬性,且是逐頂點運算的程序。每個頂點數(shù)據(jù)都會執(zhí)行一次頂點著色器。頂點著色器是并行運算,執(zhí)行過程中無法訪問其他頂點數(shù)據(jù);
  • 一般來說需要計算的頂點屬性包括頂點坐標(biāo)變換、逐頂點光照運算等。頂點坐標(biāo)由自身坐標(biāo)系轉(zhuǎn)換為歸一化坐標(biāo)系的運算,就是在這里發(fā)生

7. 片元著色器(FragmentShader):

  • 一般用來處理圖形中每個像素點的顏色計算和填充;
  • 片元著色器是OpenGL中用于計算片段(像素)顏色,且是逐像素運算的程序。也就是說每個像素都會執(zhí)行一次片元著色器,當(dāng)然也是并行執(zhí)行的。

8. GLSL(OpenGL Shading Language):

OpenGL著色語言用來在OpenGL中著色編程的語言,是在圖形卡的GPU(Graphic Processor Unit圖形處理單元)上執(zhí)行的,代替了固定的渲染管線的一部分,使渲染管線中不同層次具有可編程性。比如視圖轉(zhuǎn)換、投影轉(zhuǎn)換等。
GLSL的著色器代碼分成兩個部分:頂點著色器(VertexShader)和片元著色器(FragmentShader)。

9. 光柵化(Rasterization):

  • 是把頂點數(shù)據(jù)轉(zhuǎn)換為片元的過程,具有將圖轉(zhuǎn)換成一個個柵格組成的圖像的作用,特點是每個元素對應(yīng)幀緩沖區(qū)中的一個像素。
  • 光柵化是將幾何圖元變?yōu)槎S圖像的過程。該過程包含兩部分操作:
    • 決定窗口坐標(biāo)中哪些整型柵格區(qū)域被基本圖元占用(也就是確定圖形的像素范圍);
    • 分配一個顏色值和一個深度值到各個區(qū)域(也就是把顏色附著上去)。
  • 把物體的數(shù)學(xué)描述以及與物體相關(guān)的顏色信息,轉(zhuǎn)換為屏幕上用于對應(yīng)位置上的像素及用于填充像素的顏色,這個過程成為光柵化。這是一個將模擬信號轉(zhuǎn)化為離散信號的過程。

10. 紋理:

紋理可以理解為圖片、位圖。

11. 混合(Blending):

  • 在測試階段之后,如果像素依然沒有被剔除,那么像素的顏色將會和幀緩沖區(qū)的顏色進行混合,混合的算法可以通過OpenGL的函數(shù)進行指定。也可以通過片元著色器進行實現(xiàn),性能會比原生的混合算法差一些。
  • 兩個半透明的顏色疊加在一起,就是顏色的混合行為,就會觸發(fā)離屏渲染。

12. 變換矩陣(Transformation):

用于圖形的平移、縮放、旋轉(zhuǎn)等變換。

13. 投影矩陣(Projection):

用于將3D坐標(biāo)轉(zhuǎn)換為二維屏幕坐標(biāo),實際線條也將在二維坐標(biāo)下進行繪制。

二、坐標(biāo)解析

1. 2D笛卡爾坐標(biāo)系

2. 3D笛卡爾坐標(biāo)系

3. 觀察者坐標(biāo)系(Camera)

4. 世界坐標(biāo)系

5. 慣性坐標(biāo)系

6. 物體坐標(biāo)系

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容