iOS 視覺(jué)特效二 淺談OpenGL專業(yè)名詞

圖形API

要了解OpenGL,首先需要知道什么是圖形API挖藏。簡(jiǎn)單解釋圖形API就是圖形的底層渲染實(shí)現(xiàn)方法最楷。并且它是iOS開(kāi)發(fā)者唯?接近GPU的?式。以下介紹OpenGL铲敛、OpenGL ES褐澎、DirectX、Metal圖形API伐蒋,而本文目的是記錄OpenGL相關(guān)名詞解釋工三,加深自己理解,提供交流學(xué)習(xí)先鱼!
?\color{red}{OpenGL}(Open Graphics Library):是一個(gè)\color{red}{跨編程語(yǔ)言俭正、跨平臺(tái)}編程圖形程序接口,它將計(jì)算機(jī)的資源抽象成一個(gè)個(gè)OpenGL的對(duì)象焙畔,對(duì)這些資源的操作抽象為一個(gè)個(gè)的OpenGL指令掸读。
?\color{red}{OpenGL ES}(OpenGL for Embedded Systems):是 OpenGL 三維圖形 API 的\color{red}{?集},針對(duì)?機(jī)宏多、PDA和游戲主機(jī)等嵌?式設(shè)備?設(shè)計(jì)儿惫,去除了許多不必要和性能較低的API接?。
?\color{red}{DirectX}:是由很多API組成的伸但,DirectX并不是?個(gè)單純的圖形API肾请。 最重要的是DirectX是屬于Windows上?個(gè)多媒體處理框架,并且不?持Windows以外的平臺(tái)更胖,所以不是跨平臺(tái)框架铛铁。 按照性質(zhì)分類,可以分為四?部分:顯示部分却妨、聲?部分饵逐、輸?部分和?絡(luò)部分。
?\color{red}{Metal}:Apple為游戲開(kāi)發(fā)者推出了新的平臺(tái)技術(shù)Metal管呵,該技術(shù)能夠?yàn)?3D 圖像提?10倍的渲染性能梳毙。Metal是Apple為了解決3D渲染而推出的框架。

OpenGL專業(yè)名詞

1.OpenGL 狀態(tài)機(jī)

?狀態(tài)機(jī)是理論上的?種機(jī)器捐下,描述了?個(gè)對(duì)象在其?命周期內(nèi)所經(jīng)歷的各種狀態(tài)账锹,狀態(tài)間的轉(zhuǎn)變,發(fā)?轉(zhuǎn)變的動(dòng)因坷襟,條件及轉(zhuǎn)變中所執(zhí)?的活動(dòng)奸柬。狀態(tài)機(jī)具有:1、記憶功能婴程;2廓奕、修改功能;3、停機(jī)功能桌粉。 還是以計(jì)算器計(jì)算為例:計(jì)算器輸入1+2+3-1x1蒸绩,先執(zhí)行1x1狀態(tài),然后記憶下1x1的結(jié)果铃肯,變成1+2+3-1患亿,然后1+2的狀態(tài)修改為3并保存下來(lái),以此類推得到狀態(tài)5押逼,停止計(jì)算步藕,直到繼續(xù)輸入計(jì)算。類推到OpenGL 中來(lái),可以這么理解:
? OpenGL可以記錄??的狀態(tài)(如當(dāng)前所使?的顏?挑格、是否開(kāi)啟了混合功能等)咙冗;
? OpenGL可以接收輸?(當(dāng)調(diào)?OpenGL函數(shù)的時(shí)候,實(shí)際上可以看成OpenGL在接收我們的輸?)漂彤,如我們調(diào)?glColor3f雾消,則OpenGL接收到這個(gè)輸?后會(huì)修改??的“當(dāng)前顏?”這個(gè)狀態(tài);
? OpenGL可以進(jìn)?停?狀態(tài)显歧,不再接收輸?仪或。在程序退出前,OpenGL總會(huì)先停??作的士骤。

2.OpenGL 上下? ( context )

?在應(yīng)用程序調(diào)用任何OpenGL的指令之前,?先會(huì)創(chuàng)建OpenGL的上下?蕾域,這個(gè)上下?是?個(gè)?常龐?的狀態(tài)機(jī)拷肌,保存了OpenGL中的各種狀態(tài),這也是OpenGL指令執(zhí)?的基礎(chǔ)旨巷。OpenGL的函數(shù)不管在哪個(gè)語(yǔ)?中巨缘,都是類似C語(yǔ)??樣的?向過(guò)程的函數(shù),本質(zhì)上都是對(duì)OpenGL上下?這個(gè)龐?的狀態(tài)機(jī)中的某個(gè)狀態(tài)或者對(duì)象進(jìn)?操作采呐。因?yàn)?code>OpenGL上下?是?個(gè)巨?的狀態(tài)機(jī)切換上下?往往會(huì)產(chǎn)?較?的開(kāi)銷若锁,所以可以在應(yīng)?程序中分別創(chuàng)建多個(gè)不同的上下?,在不同線程中使?不同的上下?斧吐,上下?之間共享紋理又固、緩沖區(qū)等資源,這樣更加合理高效煤率。
?打個(gè)比方OpenGL 上下? ( context )就是計(jì)算器計(jì)算一個(gè)結(jié)果的加仰冠、減、乘蝶糯、除過(guò)程洋只,計(jì)算結(jié)果就是你想要的圖形,而這個(gè)計(jì)算過(guò)程就是OpenGL 上下? ( context )。比如1+7=8识虚;2*4=8肢扯。其中1,7担锤,2鹃彻,4就是OpenGL中的各種狀態(tài)的對(duì)象,加和乘就是context妻献,結(jié)果8就是最終你想要的圖形蛛株。

3.渲染

渲染:將圖形或者圖像數(shù)據(jù)轉(zhuǎn)換成2D空間圖像顯示到屏幕的操作叫做渲染(Rendering)

4.頂點(diǎn)數(shù)組( VertexArray ) 和 頂點(diǎn)緩沖區(qū)( VertexBuffer )

? OpenGL中的圖像是由圖元組成育拨,在OpenGL ES中谨履,有3種類型的圖元:點(diǎn)、線熬丧、三?形笋粟。而圖像的輪廓就是頂點(diǎn)數(shù)據(jù),比如三角形就是三個(gè)頂點(diǎn)數(shù)據(jù)析蝴。在繪制圖像時(shí)將這些頂點(diǎn)數(shù)據(jù)存儲(chǔ)在內(nèi)存當(dāng)中害捕,我們稱為\color{red}{頂點(diǎn)數(shù)組}
? 為提高性能闷畸,提前分配?塊顯存預(yù)存存入頂點(diǎn)數(shù)據(jù)尝盼,這部分的顯存,就被稱為\color{red}{頂點(diǎn)緩沖區(qū)}佑菩。

5.管線

OpenGL按照順序一個(gè)一個(gè)節(jié)點(diǎn)渲染圖形盾沫,這樣的操作可以稱之為\color{red}{管線}。比如工廠生產(chǎn)肥皂??殿漠,由原料-->肥皂水-->模具-->肥皂塊的順序過(guò)程就是赴精。

6.固定管線/存儲(chǔ)著?器

經(jīng)過(guò)封裝的,不可改變的著色器程序塊稱為\color{red}{固定管線}绞幌。比如管線舉例的模具固定為方形的蕾哟,因?yàn)槌杀竞托枨笤虿荒芨某扇切位蛭褰切恰?/p>

7.可編程管線

與固定管線相反,可以編程的著色器程序塊莲蜘,叫做可編程管線谭确。

8.著?器程序(Shader)

常?的著?器主要有頂點(diǎn)著?器(VertexShader),?段著色器(FragmentShader)/像素著?器(PixelShader)菇夸,?何著?器(GeometryShader)琼富,曲?細(xì)分著?器(TessellationShader)
? 頂點(diǎn)著?器(VertexShader)是OpenGL中?于計(jì)算頂點(diǎn)屬性(確定位置庄新、縮放鞠眉、平移薯鼠、旋轉(zhuǎn))的程序。每個(gè)頂點(diǎn)數(shù)據(jù)都會(huì)執(zhí)??次頂點(diǎn)著?器械蹋。
? 片元著色器(FragmentShader)是OpenGL中?于計(jì)算?段(像素)顏?的程序出皇。

9.GLSL(OpenGL Shading Language)

GLSL(OpenGL Shading Language)即是自定義且短小的用來(lái)在OpenGL中著色編程語(yǔ)言。

10.光柵化(Rasterization)

? 將頂點(diǎn)數(shù)據(jù)轉(zhuǎn)換為?元的過(guò)程哗戈;
? 將?何圖元變?yōu)?維圖像的過(guò)程郊艘;
? 將模擬信號(hào)轉(zhuǎn)化為離散信號(hào)的過(guò)程。

11.紋理

可以理解為圖?唯咬,但是在OpenGL纱注,我們更加習(xí)慣叫紋理!

12.混合(Blending)

多顏色像素合并在一起的過(guò)程稱為混合胆胰。

13.變換矩陣(Transformation)

圖形想發(fā)?平移狞贱、縮放、旋轉(zhuǎn)變換.就需要使?變換矩陣蜀涨。

14.投影矩陣(Projection)

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

15.渲染上屏/交換緩沖區(qū)(SwapBuffer)

屏幕顯示的圖像是通過(guò)窗口渲染緩沖區(qū)映射,每個(gè)窗口只有一個(gè)緩沖區(qū)厚柳,如果屏幕刷新氧枣,窗口就會(huì)顯示不完整的圖像。為解決此問(wèn)題别垮,常規(guī)的OpenGL程序?少都會(huì)有兩個(gè)緩沖區(qū):1.顯示在屏幕上的稱為屏幕緩沖區(qū)便监;2.沒(méi)有顯示的稱為離屏緩沖區(qū)。它們不斷切換的行為宰闰,就是交換緩沖區(qū)茬贵。

16.垂直同步信號(hào)

顯示器的刷新?般是逐?進(jìn)?的,因此為了防?交換緩沖區(qū)的時(shí)候屏幕上下區(qū)域的圖像分屬于兩個(gè)不同的幀移袍,因此交換?般會(huì)等待顯示器刷新完成的信號(hào),在顯示器兩次刷新的間隔中進(jìn)?交換老充,這個(gè)信號(hào)就被稱為垂直同步信號(hào)葡盗。

17.三緩沖區(qū)技術(shù)

使用了雙緩沖區(qū)和垂直同步技術(shù)之后,由于總是要等待緩沖區(qū)交換之后再進(jìn)?下?幀的渲染啡浊,使得幀率無(wú)法完全達(dá)到硬件允許的最??平觅够。為了解決這個(gè)問(wèn)題,引?了三緩沖區(qū)技術(shù)巷嚣。在等待垂直同步時(shí)喘先,來(lái)回交替渲染兩個(gè)離屏的緩沖區(qū),?垂直同步發(fā)?生時(shí)廷粒,屏幕緩沖區(qū)和最近渲染完成的離屏緩沖區(qū)交換窘拯,實(shí)現(xiàn)充分利利?硬件性能的?的红且。

18.坐標(biāo)系

OpenGL坐標(biāo)變換全局圖

image.png
  • 物體坐標(biāo),以物體為基準(zhǔn)的坐標(biāo)系涤姊。
  • 世界坐標(biāo)暇番,以全局為基準(zhǔn)的坐標(biāo)系。
  • 慣性坐標(biāo)思喊,用于做轉(zhuǎn)換運(yùn)算:物體坐標(biāo) <=> 慣性坐標(biāo) <=> 世界坐標(biāo)壁酬。
    • 慣性坐標(biāo)的原點(diǎn)和物體坐標(biāo)一致,兩坐標(biāo)系通過(guò)旋轉(zhuǎn)轉(zhuǎn)換恨课。
    • 慣性坐標(biāo)的X軸Y軸與世界坐標(biāo)水平舆乔,兩坐標(biāo)系通過(guò)平移轉(zhuǎn)換。
  • 視窗坐標(biāo)剂公,我們手機(jī)窗口對(duì)應(yīng)的坐標(biāo)系統(tǒng)希俩,以左上角為原點(diǎn)(0,0),右下角對(duì)應(yīng)我們手機(jī)最大像素集合诬留,如果手機(jī)像素為1334*750斜纪,則右下角坐標(biāo)為(1334,750)。
  • 規(guī)格化設(shè)備坐標(biāo)文兑,是以屏幕中心為原點(diǎn)盒刚,X軸朝右,Y軸朝上绿贞,所以左下角的坐標(biāo)為(-1,-1)因块,右上角坐標(biāo)為(1,1)。在規(guī)格化設(shè)備坐標(biāo)系需要考慮Z軸籍铁,需要將一個(gè)平面的思維轉(zhuǎn)為立體涡上,原點(diǎn)是(0,0,0)即立方體中心點(diǎn)。
  • 視覺(jué)坐標(biāo)拒名,是從我們眼睛出發(fā)朝我們的手機(jī)設(shè)備看過(guò)去的坐標(biāo)吩愧,會(huì)有一個(gè)Z軸最遠(yuǎn)最近距離,只有在這兩者之間并且滿足X軸和Y軸坐標(biāo)在屏幕當(dāng)中的坐標(biāo)才會(huì)顯示增显,越遠(yuǎn)的顯示越小雁佳,產(chǎn)生透視效果。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末同云,一起剝皮案震驚了整個(gè)濱河市糖权,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌炸站,老刑警劉巖星澳,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異旱易,居然都是意外死亡禁偎,警方通過(guò)查閱死者的電腦和手機(jī)腿堤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)届垫,“玉大人释液,你說(shuō)我怎么就攤上這事∽按Γ” “怎么了误债?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)妄迁。 經(jīng)常有香客問(wèn)我寝蹈,道長(zhǎng),這世上最難降的妖魔是什么登淘? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任箫老,我火速辦了婚禮,結(jié)果婚禮上黔州,老公的妹妹穿的比我還像新娘耍鬓。我一直安慰自己,他們只是感情好流妻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布牲蜀。 她就那樣靜靜地躺著,像睡著了一般绅这。 火紅的嫁衣襯著肌膚如雪涣达。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,737評(píng)論 1 305
  • 那天证薇,我揣著相機(jī)與錄音度苔,去河邊找鬼。 笑死浑度,一個(gè)胖子當(dāng)著我的面吹牛寇窑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播箩张,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼疗认,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了伏钠?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤谨设,失蹤者是張志新(化名)和其女友劉穎熟掂,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體扎拣,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赴肚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年素跺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片誉券。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡指厌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出踊跟,到底是詐尸還是另有隱情踩验,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布商玫,位于F島的核電站箕憾,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏拳昌。R本人自食惡果不足惜袭异,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望炬藤。 院中可真熱鬧御铃,春花似錦、人聲如沸沈矿。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)细睡。三九已至谷羞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間溜徙,已是汗流浹背湃缎。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蠢壹,地道東北人嗓违。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像图贸,于是被迫代替她去往敵國(guó)和親蹂季。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355