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