OpenGL的常見專業名詞解析

狀態機

  • 可以理解爲一臺可以保存狀態,並根據當前狀態進行相應輸出的機器,也可以理解爲就是一種存在於理論中的機器;
  • 首先,它有記憶的能力,能夠記住自己當前的狀態。(電腦的存儲器(內存、硬盤等),可以記住電腦自己當前的狀態(當前安裝在電腦中的軟件、保存在電腦中的數據,其實都是二進制的值,都屬於當前的狀態),狀態機就相當於這裏的電腦,類似於這樣的“存儲記憶”,因而OpenGL可以記錄自己的狀態(比如:當前所使用的顏色、是否開啓了混合功能等,這些都是要記錄的));
  • 其次,它可以接收輸入,根據用戶輸入的內容和自己的狀態,修改自己的狀態,並且可以得到輸出。(電腦的輸入設備接收輸入(鍵盤輸入、鼠標輸入、文件輸入),根據輸入的內容和自己的狀態(主要指可以運行的程序代碼),修改自己的狀態(修改內存中的值),並且可以得到輸出(將結果顯示到屏幕),OpenGL和電腦類似,也可以接收輸入(當調用OpenGL函數的時候,可以看成OpenGL在接收輸入),根據輸入的內容和自己的狀態,修改自己的狀態,並且可以得到輸出(比如當調用glColor3f,則OpenGL接收到這個輸入後會修改自己的“當前顏色”這個狀態;當調用glRectf,則OpenGL會輸出一個矩形));
  • 最後,當它進入某個特殊的狀態(停機狀態)的時候,它不再接收輸入,停止工作。(類似於電腦關機之後,便不再接收信息,停止工作);

上下文 Context

  • 保存OpenGL中各種狀態的一個龐大狀態機,記錄OpenGL渲染需要的所有信息,它是一個大的結構體,它裏面記錄了當前繪製使用的顏色、是否有光照計算以及開啓的光源等非常多的使用OpenGL函數調用設置的狀態和狀態屬性;
  • OpenGL指令執⾏的基礎,比如保存了一系列的變量用來描述OpenGL此刻需要如何運行,比如拍照時候要開啓濾鏡功能等等;
  • 應用程序中可以創建多個不同的上下文,分別在各自的線程中使用。上下文之間共享紋理,緩衝區等資源,採用這中方案更爲高效,因爲它避免了反覆切換上下文,或者大量修改渲染狀態所造成的較大的開銷;

渲染(Rendering)

  • 在OpenGL中,所有東西都在一個3D的空間裏,而屏幕和窗口都是2D的,所以OpenGL需要將3D的座標轉換成2D的座標,這就是渲染(包括第一部分將3D座標轉換成2D座標;第二部分把2D的座標轉換成實際的像素);

頂點數組 VertexArray、頂點緩衝區 VertexBuffer

  • 常量頂點屬性對於一個圖元的所有頂點都相同,所以對一個圖元的所有頂點只需指定一個值;
  • 頂點數組指定每個頂點的屬性 ,是保存在應用程序的地址空間 (OpenGL ES 稱爲客戶空間) 的緩衝區,常在內存中;
  • 頂點緩衝區(VertexBuffer)用於保存一個或多個圖元的索引,常在緩存中;初始化或者更新 緩衝區對象數據存儲之後,客戶數據存儲不再需要的,靜態的幾何圖形可以釋放客戶數據存儲,減少應用程序消耗的內存;

管線

  • 管線包含一系列處理階段,定點數據和像素數據進入管線進行處理,最後組合到一起寫入幀緩衝區;
  • 渲染的過程就相當於管線,類似於生產流水線;
  • 主要分爲固定管線(類似於API,只是參數的不同)和可編程管線(GLSL語法來驅使GPU);

着色器

  • 用來處理頂點相關代碼的程序,主要作用於GPU(一個着色器類似於一個函數或者方法,但函數和方法是作用於CPU);
  • 固定着色器:固定封裝的API代碼段,只是需要的參數不同;
  • 頂點着色器:將頂點座標由自身座標系轉換到歸一座標系,是逐頂點運行的程序,即每個頂點數據都會執行一次,確定其位置;主要用來處理圖形頂點的變換(旋轉、平移、縮放),3D圖形數據投影換算 爲2D圖形數據等;
  • 片元着色器:主要用於處理一個個的像素點,逐像素且在GPU並行運算,即每個像素都會執行一次;
  • 自定義着色器:進行自定義編譯的代碼片段;

GLSL

  • GLSL着色語⾔是⽤來在OpenGL中着⾊編程的語⾔,是在圖形卡的GPU上執⾏的,代替了固定的渲染管線的⼀部分,使渲染管線中不同層次具有可編程性;

光柵化

  • 光柵化是將圖元轉化爲一組二維片段的過程:當渲染一個圖元時,光柵化(Rasterization)階段通常會造成比原指定頂點更多的片段。它會根據每個片段在圖元上所處相對位置決定這些片段的位置。基於這些位置,它會插值(Interpolate)所有片段着色器的輸入變量;
  • 包含了兩部分的⼯作:一是決定窗⼝座標中的哪些整型柵格區域被基本圖元佔⽤,二是分配一個顏⾊值和⼀個深度值到各個區域;
  • 幾何圖元轉化爲二維圖像,把物體的數學描述和相關的顏色信息轉換爲屏幕上對應位置的像素及填充像素顏色,將模擬信號轉換爲離散信號;

紋理(Texture、位圖)

  • 紋理可以理解爲是一個2D圖片(甚至也有1D和3D的紋理),它可以用來添加物體的細節;需要將png轉換成位圖,所以紋理又是位圖;
  • 紋理也可以被用來儲存大量的數據,可以發送到着色器上;
  • 將平時的jpg/png圖片轉換成位圖,位圖即爲紋理;

混合(Blending)

  • 爲了渲染出不同的透明度級別,需要開啓混合;
  • 可以理解爲圖層疊加的計算;

變換矩陣 (Transformation)

  • 用於圖形的平移、旋轉、縮放時使用;

投影矩陣 (Projection)

  • 將3D座標轉換爲2D屏幕座標時使用;

渲染上屏/交換緩衝區 (SwapBuffer)

  • 渲染緩衝區:可以理解爲是系統的資源,例如窗口;
  • 渲染上屏:將圖像直接渲染到窗口對應的渲染緩衝區;
  • 顯示在屏幕上的稱爲屏幕緩衝區,沒有顯示的稱爲離屏緩衝區;在一個緩衝區渲染完成之後,通過將屏幕緩衝區和離屏緩衝區交換,實現圖像在屏幕上顯示;
  • 爲防⽌交換緩衝區的時候屏幕上下區域的圖像分屬於兩個不同的幀,交換一般會等待顯示器刷新完成的信號,在顯示器器兩次刷新的間隔中進⾏交換,這個信號就被稱爲垂直同步信號,這個技術被稱爲垂直同步;
  • 在等待垂直同步時,來回交替渲染兩個離屏的緩衝區,⽽垂直同步發⽣生時,屏幕緩衝區和最近渲染完成的離屏緩衝區交換,實現充分利利⽤硬件性能的⽬的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章