OpenGL相關(guān)名詞解析

一酷愧、什么是圖形API

OpenGL是一個(gè)跨編程語(yǔ)言箕昭、跨平臺(tái)的編程圖形程序接口歌憨,它講計(jì)算機(jī)的資源抽象成為一個(gè)OpenGL的對(duì)象,對(duì)這些資源的操作抽象為一個(gè)個(gè)OpenGL指令财饥。

OpenGL ES 是OpenGL三維圖形API的子集换吧,針對(duì)手機(jī)、PDA(掌上電腦)和游戲主機(jī)等嵌入式設(shè)備而設(shè)計(jì)钥星,去除了很多不必要的和性能較低的API接口沾瓦。

DirectX是由很多API組成的,DirectX并不是一個(gè)單純的圖形API谦炒。更重要的是DirectX是屬于Windows上的一個(gè)多媒體處理框架暴拄,且不支持Windows以外的平臺(tái),不屬于跨平臺(tái)框架编饺。按照性質(zhì)分類乖篷,可以分為:1、顯示部分2透且、聲音部分3撕蔼、輸入部分4、網(wǎng)絡(luò)部分秽誊。

Metal是蘋果為游戲開發(fā)者推出的新的平臺(tái)技術(shù)鲸沮,旨在解決3D渲染,該技術(shù)能夠?yàn)?D圖像提高10倍的渲染性能锅论。2014年到2018年apple將系統(tǒng)內(nèi)部從OpenGL ES到Matel,并于2018年宣布棄用OpenGL ES讼溺。

二、OpenGL名詞解析

1最易、紋理

紋理可以理解問圖片怒坯,在渲染圖形時(shí)為了使場(chǎng)景更加逼真炫狱,需要在頂點(diǎn)圍成的區(qū)域中填充圖片,這個(gè)圖片就是所謂的紋理剔猿,紋理只是OpenGL里的對(duì)圖片的稱呼视译。

2、OpenGL狀態(tài)機(jī)

狀態(tài)機(jī)描述了一個(gè)對(duì)象在其生命周期內(nèi)所經(jīng)歷的各種狀態(tài)归敬、狀態(tài)間的轉(zhuǎn)變酷含、發(fā)生轉(zhuǎn)變的原因、條件汪茧,及轉(zhuǎn)變中所執(zhí)行的活動(dòng)椅亚。

也可以說狀態(tài)機(jī)是一種行為,描述對(duì)象在其生命周期中響應(yīng)事件所經(jīng)歷的狀態(tài)序列以及對(duì)狀態(tài)事件的響應(yīng)舱污。

特點(diǎn):(1).有記憶功能呀舔,能記住當(dāng)前的狀態(tài);(2).可以接收輸入慌闭,根據(jù)輸入的內(nèi)容和自己原先的狀態(tài),修改自己當(dāng)前的狀態(tài)躯舔,且可以有對(duì)應(yīng)的輸出驴剔。(3).當(dāng)進(jìn)入特殊狀態(tài)(停機(jī)狀態(tài))的時(shí)候,便不再接收輸入粥庄,停止工作丧失。

OpenGL是一個(gè)狀態(tài)機(jī),記錄自己的狀態(tài)惜互,除非用戶輸入命令讓她改變自己的狀態(tài)布讹,OpenGL 接收輸入的一些方法:

可以使用glColor*函數(shù)來選擇一種顏色,以后繪制的所有物體都是這種顏色训堆,除非再次使用glColor*函數(shù)重新設(shè)定描验。

可以使用glTexCoord*函數(shù)來設(shè)置一個(gè)紋理坐標(biāo),以后繪制的所有物體都是采用這種紋理坐標(biāo)坑鱼,除非再次使用glTexCoord*函數(shù)重新設(shè)置膘流。

可以使用glBlendFunc函數(shù)來指定混合功能的源因子和目標(biāo)因子,以后繪制的所有物體都是采用這個(gè)源因子和目標(biāo)因子鲁沥,除非再次使用glBlendFunc函數(shù)重新指定呼股。

可以使用glLight*函數(shù)來指定光源的位置、顏色画恰,以后繪制的所有物體都是采用這個(gè)光源的位置彭谁、顏色,除非再次使用glBlendFunc函數(shù)重新指定

3允扇、OpenGL 上下文(Context)

在應(yīng)用程序中調(diào)用OpenGL指令前缠局,首先需要?jiǎng)?chuàng)建OpenGL的上下文则奥。上下文是一個(gè)非常大的狀態(tài)機(jī),保存了OpenGL中的各種狀態(tài)甩鳄,這也是OpenGL指令執(zhí)行的基礎(chǔ)逞度。

OpenGL函數(shù)式面向過程的函數(shù),本質(zhì)上是對(duì)OpenGL上下文這個(gè)龐大的狀態(tài)機(jī)的某個(gè)狀態(tài)或者對(duì)象進(jìn)行操作妙啃,當(dāng)然档泽,前提是把這個(gè)對(duì)象設(shè)置為當(dāng)前對(duì)象。因此揖赴,通過對(duì)OpenGL指令的封裝是可以將OpenGL的調(diào)用封裝成一個(gè)面向?qū)ο蟮膱D形API馆匿。

OpenGL上下文是一個(gè)龐大的狀態(tài)機(jī),切換上下文的開銷很大燥滑,但是不同的繪制模塊可能需要獨(dú)立的狀態(tài)管理渐北。因此,在應(yīng)用程序中創(chuàng)建多個(gè)不同的上下文铭拧,在不同的線程中調(diào)用不同的上下文赃蛛,這些上下文之間共享紋理,緩沖區(qū)等資源搀菩。會(huì)比反復(fù)切換上下文呕臂,或大量修改渲染狀態(tài)更加高效。

4肪跋、渲染

將圖形歧蒋、圖像數(shù)據(jù)轉(zhuǎn)換成3D空間圖像的操作叫做渲染。

5州既、頂點(diǎn)數(shù)組和頂點(diǎn)緩沖區(qū)

頂點(diǎn)數(shù)據(jù)就是圖像的輪廓谜洽,OpenGL中的圖像都是由圖元組成。在OpenGL ES中吴叶,有三種類型的圖元:點(diǎn)阐虚,線,三角形蚌卤。

在調(diào)用繪制方法的時(shí)候敌呈,直接由內(nèi)存?zhèn)魅腠旤c(diǎn)數(shù)據(jù),也就是說這部分?jǐn)?shù)據(jù)之前時(shí)存儲(chǔ)在內(nèi)存當(dāng)中的造寝,被稱作頂點(diǎn)數(shù)組磕洪。

提前分配一塊顯存,將頂點(diǎn)數(shù)據(jù)預(yù)先傳入顯存當(dāng)中诫龙,能夠讓性能更高效析显。這部分顯存被稱作頂點(diǎn)緩沖區(qū)。

6签赃、管線

管線是一個(gè)抽象的概念谷异,OpenGL下渲染圖形分尸,會(huì)經(jīng)歷一個(gè)一個(gè)節(jié)點(diǎn),這樣的操作可以理解為管線歹嘹。之所以叫管線是因?yàn)轱@卡在處理數(shù)據(jù)的時(shí)候是按照一個(gè)固定的順序來的箩绍,且嚴(yán)格執(zhí)行這個(gè)順序。


7尺上、固定管線/存儲(chǔ)著色器

在早起的OpenGL 版本材蛛,封裝了多種著色器程序塊,內(nèi)置了一段包含光照怎抛、坐標(biāo)轉(zhuǎn)換卑吭、裁剪等諸多功能的著色器(shader)程序,幫助開發(fā)者完成圖形的渲染马绝。開發(fā)者只需傳入?yún)?shù)調(diào)用即可完成圖形的渲染豆赏。

由于OpenGL使用場(chǎng)景非常豐富,固定管線或者存儲(chǔ)著色器無法完成每一個(gè)業(yè)務(wù)富稻,將相關(guān)部分開放成可編程掷邦。

8、光柵化

光柵化就是把頂點(diǎn)數(shù)據(jù)轉(zhuǎn)換成片元的過程椭赋,具有將圖片轉(zhuǎn)換成一個(gè)個(gè)柵格組成的圖像抚岗。特點(diǎn)是每個(gè)元素對(duì)應(yīng)幀緩沖區(qū)的一個(gè)像素。

光柵化是一種將幾何圖元變?yōu)槎S圖像的過程纹份,包括兩部分工作:1.決定窗口坐標(biāo)中的那些整型柵格區(qū)域被基本圖元占用苟跪;2.分配一個(gè)顏色值和一個(gè)深度值到各個(gè)區(qū)域廷痘,從而產(chǎn)生片元蔓涧。

光柵化是一個(gè)將模擬信號(hào)轉(zhuǎn)化為離散信號(hào)的過程:把物體的數(shù)學(xué)描述和顏色信息轉(zhuǎn)換成屏幕上用于對(duì)應(yīng)位置的像素和填充像素的顏色。

9笋额、著色器程序(shader)

將固定渲染管線架構(gòu)變成了可編程渲染管線元暴。

OpenGL在實(shí)際調(diào)用繪制函數(shù)之前,還需要指定一個(gè)由shader編譯成的著色器程序兄猩。常見的著色器程序有頂點(diǎn)著色器茉盏,片段著色器/像素著色器,幾何著色器枢冤,曲面細(xì)分著色器鸠姨。片段著色器和像素著色器只是在OpenGL和DirectX中的不同叫法。直到OpenGL ES3.0淹真,依然只支持頂點(diǎn)著色器和片段著色器讶迁。

OpenGL在處理shader是,和其他編譯器一樣核蘸,通過編譯巍糯、鏈接等步驟啸驯,生成著色器程序。著色器程序同時(shí)包含頂點(diǎn)著色器和片段著色器的運(yùn)算邏輯祟峦。

OpenGL繪制過程:首先由頂點(diǎn)著色器對(duì)傳入的頂點(diǎn)數(shù)據(jù)進(jìn)行運(yùn)算-->通過圖元裝配將頂點(diǎn)轉(zhuǎn)換成圖元-->然后進(jìn)行光柵化罚斗,將圖元這種矢量圖轉(zhuǎn)換成柵格化數(shù)據(jù)-->將柵格化數(shù)據(jù)傳入片段著色器進(jìn)行運(yùn)算。片段著色器對(duì)柵格化數(shù)據(jù)中的每一個(gè)像素進(jìn)行運(yùn)算宅楞,并決定像素的顏色针姿。

9.1、頂點(diǎn)著色器

頂點(diǎn)著色器是OpenGL中用于計(jì)算頂點(diǎn)屬性的程序咱筛。

一般來說典型的需要計(jì)算的頂點(diǎn)屬性主要包括頂點(diǎn)坐標(biāo)轉(zhuǎn)換搓幌,逐頂點(diǎn)關(guān)照運(yùn)算等等。頂點(diǎn)坐標(biāo)由自身坐標(biāo)系轉(zhuǎn)換到歸一化坐標(biāo)系的運(yùn)算迅箩,就是在這里發(fā)生的溉愁。

頂點(diǎn)著色器是逐頂點(diǎn)運(yùn)算的程序,也就是說每個(gè)頂點(diǎn)數(shù)據(jù)都會(huì)只從一次頂點(diǎn)著色器(并行)饲趋,且頂點(diǎn)著色器運(yùn)算過程中過無法訪問其他頂點(diǎn)的數(shù)據(jù)拐揭。

9.2、片元著色器程序

片段著色器是OpenGL中用于計(jì)算片段(像素)顏色的程序奕塑。一般用來處理圖形中每個(gè)像素點(diǎn)的顏色計(jì)算和填充堂污。

片段著色器是逐像素運(yùn)算的程序,也就是說每個(gè)像素都會(huì)執(zhí)行一次片元著色器(并行)龄砰。

10盟猖、GLSL

OpenGL 著色語(yǔ)言是用來在OpenGL中著色的語(yǔ)言,也就是開發(fā)人員寫的短小的自定義程序换棚,是在圖形卡的GPU上執(zhí)行式镐,代替了固定的渲染管線的一部分,是渲染管線中不同層次具有可編程性固蚤。GLSL的著色器代碼分成兩個(gè)部分:頂點(diǎn)著色器和片段著色器娘汞。

11、混合

在測(cè)試階段夕玩,如果像素依然沒有被剔除你弦,那么像素的顏色將會(huì)和幀緩沖區(qū)中附著的顏色混合×敲希混合的算法可以通過OpenGL的函數(shù)進(jìn)行指定禽作,但是OpenGL提供的混法算法有限,可以通過著色器實(shí)現(xiàn)更復(fù)雜的混合算法揩页,性能會(huì)比原生的差旷偿。

12、變換矩陣

可以用于圖形的平移,縮放狸捅,旋轉(zhuǎn)變換等

13衷蜓、投影矩陣

將3D坐標(biāo)轉(zhuǎn)換成為二維屏幕坐標(biāo),實(shí)際線條也將在二維坐標(biāo)下進(jìn)行繪制尘喝。

13磁浇、渲染上屏/交換緩沖區(qū)

渲染緩沖區(qū)一般映射的是系統(tǒng)的資源,就像窗口朽褪,如果將圖像直接渲染到窗口對(duì)應(yīng)的渲染緩沖區(qū)置吓,則可以將圖像顯示到屏幕上。*每個(gè)窗口只有一個(gè)緩沖區(qū)缔赠,如果在繪制過程中屏幕進(jìn)行了刷新衍锚,窗口可能顯示出不完整的圖像。

為了解決這個(gè)問題嗤堰,常規(guī)的OpenGL程序至少會(huì)有兩個(gè)緩沖區(qū)戴质。顯示在屏幕上的稱為屏幕緩沖區(qū),沒有顯示的稱為離屏緩沖區(qū)踢匣。在一個(gè)緩沖區(qū)渲染完成后告匠,通過屏幕緩沖區(qū)和離屏緩沖區(qū)交換,實(shí)現(xiàn)圖像在屏幕上的顯示离唬。

由于顯示器是逐行刷新的后专,為了防止緩沖區(qū)交換的時(shí)候,屏幕上下的區(qū)域分屬兩個(gè)不同的幀输莺,所以交換動(dòng)作會(huì)等待屏幕刷新完成的信號(hào)戚哎,這個(gè)信號(hào)叫做垂直同步信號(hào),緩沖區(qū)交換過程在兩次屏幕刷新之間進(jìn)行嫂用。

在使用雙緩沖區(qū)和垂直同步信號(hào)后型凳,需要在緩沖區(qū)交換完成后才會(huì)進(jìn)行下一幀的渲染,這樣幀率無法達(dá)到硬件允許的最高水平尸折。為了解決這個(gè)問題啰脚,引入了三緩沖區(qū)技術(shù)殷蛇。有兩個(gè)離屏緩沖區(qū)实夹,垂直同步發(fā)生時(shí),屏幕緩沖區(qū)和最近完成的離屏緩沖區(qū)交換粒梦。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末亮航,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子匀们,更是在濱河造成了極大的恐慌缴淋,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異重抖,居然都是意外死亡露氮,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門钟沛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畔规,“玉大人,你說我怎么就攤上這事恨统∪ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵畜埋,是天一觀的道長(zhǎng)莫绣。 經(jīng)常有香客問我,道長(zhǎng)悠鞍,這世上最難降的妖魔是什么对室? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮咖祭,結(jié)果婚禮上软驰,老公的妹妹穿的比我還像新娘。我一直安慰自己心肪,他們只是感情好锭亏,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著硬鞍,像睡著了一般慧瘤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上固该,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天锅减,我揣著相機(jī)與錄音,去河邊找鬼伐坏。 笑死怔匣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的桦沉。 我是一名探鬼主播每瞒,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼纯露!你這毒婦竟也來了剿骨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤埠褪,失蹤者是張志新(化名)和其女友劉穎浓利,沒想到半個(gè)月后挤庇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贷掖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年嫡秕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苹威。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡淘菩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出屠升,到底是詐尸還是另有隱情潮改,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布腹暖,位于F島的核電站汇在,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏脏答。R本人自食惡果不足惜糕殉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望殖告。 院中可真熱鬧阿蝶,春花似錦、人聲如沸黄绩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)爽丹。三九已至筑煮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間粤蝎,已是汗流浹背真仲。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留初澎,地道東北人秸应。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像碑宴,于是被迫代替她去往敵國(guó)和親软啼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344