OpenGL之常見的專業(yè)名詞解析
狀態(tài)機
狀態(tài)機可以理解為一臺可以保存狀態(tài),并根據(jù)當前狀態(tài)進行相應輸出的機器,也可以理解為就是一種存在于理論中的機器;
首先,它有記憶的能力,能夠記住自己當前的狀態(tài)。(電腦的存儲器(內(nèi)存、硬盤等),可以記住電腦自己當前的狀態(tài)(當前安裝在電腦中的軟件、保存在電腦中的數(shù)據(jù),其實都是二進制的值,都屬于當前的狀態(tài)),狀態(tài)機就相當于這里的電腦,類似于這樣的“存儲記憶”,因而OpenGL可以記錄自己的狀態(tài)(比如:當前所使用的顏色、是否開啟了混合功能等,這些都是要記錄的));
其次,它可以接收輸入,根據(jù)用戶輸入的內(nèi)容和自己的狀態(tài),修改自己的狀態(tài),并且可以得到輸出。(電腦的輸入設備接收輸入(鍵盤輸入、鼠標輸入、文件輸入),根據(jù)輸入的內(nèi)容和自己的狀態(tài)(主要指可以運行的程序代碼),修改自己的狀態(tài)(修改內(nèi)存中的值),并且可以得到輸出(將結(jié)果顯示到屏幕),OpenGL和電腦類似,也可以接收輸入(當調(diào)用OpenGL函數(shù)的時候,可以看成OpenGL在接收輸入),根據(jù)輸入的內(nèi)容和自己的狀態(tài),修改自己的狀態(tài),并且可以得到輸出(比如當調(diào)用glColor3f,則OpenGL接收到這個輸入后會修改自己的“當前顏色”這個狀態(tài);當調(diào)用glRectf,則OpenGL會輸出一個矩形));
最后,當它進入某個特殊的狀態(tài)(停機狀態(tài))的時候,它不再接收輸入,停止工作。(類似于電腦關(guān)機之后,便不再接收信息,停止工作);
上下文 Context
保存OpenGL中各種狀態(tài)的一個龐大狀態(tài)機,記錄OpenGL渲染需要的所有信息,它是一個大的結(jié)構(gòu)體,它里面記錄了當前繪制使用的顏色、是否有光照計算以及開啟的光源等非常多的使用OpenGL函數(shù)調(diào)用設置的狀態(tài)和狀態(tài)屬性;
OpenGL指令執(zhí)?的基礎(chǔ),比如保存了一系列的變量用來描述OpenGL此刻需要如何運行,比如拍照時候要開啟濾鏡功能等等;
應用程序中可以創(chuàng)建多個不同的上下文,分別在各自的線程中使用。上下文之間共享紋理,緩沖區(qū)等資源,采用這中方案更為高效,因為它避免了反復切換上下文,或者大量修改渲染狀態(tài)所造成的較大的開銷;
渲染(Rendering)
在OpenGL中,所有東西都在一個3D的空間里,而屏幕和窗口都是2D的,所以OpenGL需要將3D的坐標轉(zhuǎn)換成2D的坐標,這就是渲染(包括第一部分將3D坐標轉(zhuǎn)換成2D坐標;第二部分把2D的坐標轉(zhuǎn)換成實際的像素);
頂點數(shù)組 VertexArray、頂點緩沖區(qū) VertexBuffer
常量頂點屬性對于一個圖元的所有頂點都相同,所以對一個圖元的所有頂點只需指定一個值;
頂點數(shù)組指定每個頂點的屬性 ,是保存在應用程序的地址空間 (OpenGL ES 稱為客戶空間) 的緩沖區(qū),常在內(nèi)存中;
頂點緩沖區(qū)(VertexBuffer)用于保存一個或多個圖元的索引,常在緩存中;初始化或者更新 緩沖區(qū)對象數(shù)據(jù)存儲之后,客戶數(shù)據(jù)存儲不再需要的,靜態(tài)的幾何圖形可以釋放客戶數(shù)據(jù)存儲,減少應用程序消耗的內(nèi)存;
管線
管線包含一系列處理階段,定點數(shù)據(jù)和像素數(shù)據(jù)進入管線進行處理,最后組合到一起寫入幀緩沖區(qū);
渲染的過程就相當于管線,類似于生產(chǎn)流水線;
主要分為固定管線(類似于API,只是參數(shù)的不同)和可編程管線(GLSL語法來驅(qū)使GPU);
著色器
用來處理頂點相關(guān)代碼的程序,主要作用于GPU(一個著色器類似于一個函數(shù)或者方法,但函數(shù)和方法是作用于CPU);
固定著色器:固定封裝的API代碼段,只是需要的參數(shù)不同;
頂點著色器:將頂點坐標由自身坐標系轉(zhuǎn)換到歸一坐標系,是逐頂點運行的程序,即每個頂點數(shù)據(jù)都會執(zhí)行一次,確定其位置;主要用來處理圖形頂點的變換(旋轉(zhuǎn)、平移、縮放),3D圖形數(shù)據(jù)投影換算 為2D圖形數(shù)據(jù)等;
片元著色器:主要用于處理一個個的像素點,逐像素且在GPU并行運算,即每個像素都會執(zhí)行一次;
自定義著色器:進行自定義編譯的代碼片段;
GLSL
GLSL著色語?是?來在OpenGL中著?編程的語?,是在圖形卡的GPU上執(zhí)?的,代替了固定的渲染管線的?部分,使渲染管線中不同層次具有可編程性;
光柵化
光柵化是將圖元轉(zhuǎn)化為一組二維片段的過程:當渲染一個圖元時,光柵化(Rasterization)階段通常會造成比原指定頂點更多的片段。它會根據(jù)每個片段在圖元上所處相對位置決定這些片段的位置。基于這些位置,它會插值(Interpolate)所有片段著色器的輸入變量;
包含了兩部分的?作:一是決定窗?坐標中的哪些整型柵格區(qū)域被基本圖元占?,二是分配一個顏?值和?個深度值到各個區(qū)域;
幾何圖元轉(zhuǎn)化為二維圖像,把物體的數(shù)學描述和相關(guān)的顏色信息轉(zhuǎn)換為屏幕上對應位置的像素及填充像素顏色,將模擬信號轉(zhuǎn)換為離散信號;
紋理(Texture、位圖)
紋理可以理解為是一個2D圖片(甚至也有1D和3D的紋理),它可以用來添加物體的細節(jié);需要將png轉(zhuǎn)換成位圖,所以紋理又是位圖;
紋理也可以被用來儲存大量的數(shù)據(jù),可以發(fā)送到著色器上;
將平時的jpg/png圖片轉(zhuǎn)換成位圖,位圖即為紋理;
混合(Blending)
為了渲染出不同的透明度級別,需要開啟混合;
可以理解為圖層疊加的計算;
變換矩陣 (Transformation)
用于圖形的平移、旋轉(zhuǎn)、縮放時使用;
投影矩陣 (Projection)
將3D坐標轉(zhuǎn)換為2D屏幕坐標時使用;
渲染上屏/交換緩沖區(qū) (SwapBuffer)
渲染緩沖區(qū):可以理解為是系統(tǒng)的資源,例如窗口;
渲染上屏:將圖像直接渲染到窗口對應的渲染緩沖區(qū);
顯示在屏幕上的稱為屏幕緩沖區(qū),沒有顯示的稱為離屏緩沖區(qū);在一個緩沖區(qū)渲染完成之后,通過將屏幕緩沖區(qū)和離屏緩沖區(qū)交換,實現(xiàn)圖像在屏幕上顯示;
為防?交換緩沖區(qū)的時候屏幕上下區(qū)域的圖像分屬于兩個不同的幀,交換一般會等待顯示器刷新完成的信號,在顯示器兩次刷新的間隔中進?交換,這個信號就被稱為垂直同步信號,這個技術(shù)被稱為垂直同步;
在等待垂直同步時,來回交替渲染兩個離屏的緩沖區(qū),?垂直同步發(fā)生時,屏幕緩沖區(qū)和最近渲染完成的離屏緩沖區(qū)交換,實現(xiàn)充分利?硬件性能的?的。
OpenGL 渲染
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。