OpenGL專業(yè)名詞解析

圖形API簡介

  • OpenGL (Open Graphics Library) 是一個跨編程語言、跨平臺的編程圖形程序接口規(guī)范
    • OpenGL可以跳過操作系統(tǒng),直接調用GPU硬件執(zhí)行圖形圖像渲染處理(可理解為繪圖)
    • OpenGL是一套規(guī)范折欠,不同的GPU硬件廠商根據(jù)規(guī)范像調用者提供接口
  • OpenGL ES (OpenGL for Embedded Systems)是 OpenGL 三維圖形 API 的子集叠萍,針對手機造壮、PAD和游戲主機等嵌入式設備而設計渡讼,去除了許多不必要和性能較低的 API 接口。
  • Metal:Apple為游戲開發(fā)者退出了新的平臺技術 Metal耳璧,該技術能夠為 3D 圖像提高 10 被的渲染性能成箫。Metal 是 Apple 為了解決 3D 渲染而退出的框架。
  • DirectX 是由很多 API 組成的旨枯,DirectX 并不是一個淡出的圖形 API蹬昌,最重要的是 DirectX 是屬于Windows上一個多媒體處理API,并不支持 Windows 以外的平臺攀隔,所以不是跨平臺框架皂贩。按照性質分類蔬芥,可以分為四大部分:顯示部分常遂、聲音部分掰吕、輸入部分和網(wǎng)絡部分俊抵。

OpenGL 專業(yè)名詞解釋

  • OpenGL 狀態(tài)機
    • 狀態(tài)機是理論上的一種機器先煎。這個非常難以理解助泽。所以我們把狀態(tài)機這么理解:狀態(tài)機描述了一個對象在其生命周期內所經(jīng)歷的各種狀態(tài)楞慈、狀態(tài)間的轉變旺嬉、發(fā)生轉變的動因败潦、條件及轉變中所執(zhí)行的活動本冲。或者說劫扒,狀態(tài)機是一種行為檬洞,說明對象在其聲明周期中響應事件所經(jīng)歷的狀態(tài)序列以及對那些狀態(tài)事件的響應。因此具有以下特點:
    • 有記憶功能沟饥,能記住當前狀態(tài)添怔;
      可以接受輸入,根據(jù)輸入的內容和自己的原先狀態(tài)贤旷,修改自己當前狀態(tài)广料,并且可以有對應輸出;
    • 當進入特殊狀態(tài)(停機狀態(tài))的時候幼驶,便不再接受輸入艾杏,停止工作;
  • OpenGL上下文(context)
    • 在應?程序調?任何OpenGL的指令之前盅藻,首先需要創(chuàng)建?個OpenGL的上下?文购桑。這個上下?是?個?常龐?的狀態(tài)機,保存了了OpenGL中的各種狀態(tài)氏淑,這也是OpenGL指令執(zhí)?的基礎勃蜘。
    • OpenGL的函數(shù)不管在哪個語?中,都是類似C語?一樣的面向過程的函數(shù)假残。本質上都是對OpenGL上下?這個龐?的狀態(tài)機中的某個狀態(tài)或者對象進行操作缭贡。通過對 OpenGL指令的封裝,可以將OpenGL的相關調?封裝成為?個?向對象的圖形API守问。
    • 由于OpenGL上下?是?個巨?大的狀態(tài)機匀归,切換上下文往往會產(chǎn)生較?的開銷,但是不同的繪制模塊耗帕,可能需要使?完全獨立的狀態(tài)管理穆端。因此,可以在應?程序中分別創(chuàng)建多個不同的上下文仿便,在不同線程中使?不同的上下文体啰,上下?之間共享紋理攒巍、緩沖區(qū)等資源。這樣的?方案荒勇,會?比反復切換上下?柒莉,或者?量修改渲染狀態(tài),更加合理高效沽翔。
  • 渲染
    • 將圖形/圖像數(shù)據(jù)轉換成3D空間圖像操作叫做渲染(Rendering)
  • 頂點數(shù)組和頂點緩沖區(qū)
    • 頂點數(shù)據(jù)就是圖像的輪廓兢孝。OpenGL中的圖像都是由圖元組成。在OpenGL ES中仅偎,有3種類型的圖元:點跨蟹、線、三?形橘沥。
    • 在調?繪制?法的時候窗轩,直接由內存?zhèn)魅腠旤c數(shù)據(jù),也就是說這部分數(shù)據(jù)之前是存儲在內存當中的座咆,被稱為頂點數(shù)組(VertexArray)痢艺。
    • ?性能更高的做法是,提前分配?塊顯存介陶,將頂點數(shù)據(jù)預先傳?到顯存當中堤舒。這部分的顯存,就被稱為頂點緩沖區(qū)(VertexBuffer)哺呜。
  • 管線
    • 在OpenGL下渲染圖形植酥,就會經(jīng)歷?個?個的節(jié)點。而這樣的操作可以理解管線弦牡,就像一個流?線友驮,任務按照先后順序依次執(zhí)行。管線是?個抽象的概念驾锰,之所以稱之為管線是因為顯卡在處理數(shù)據(jù)的時候是按照一個固定的順序來的卸留,而且嚴格按照這個順序
  • 固定管線/存儲著色器
    • 在早期的OpenGL版本,封裝了多種著色器程序塊椭豫,內置了一段包含了光照耻瑟、坐標變換、裁剪等諸多功能的固定shader程序來完成赏酥。來幫助開發(fā)者來完成圖形的渲染喳整。開發(fā)者只需要傳入相應的參數(shù),就能快速完成圖形的渲染裸扶。類似于iOS開發(fā)會封裝很多API框都,而我們只需要調?,就可以實現(xiàn)功能呵晨,不需要關注底層實現(xiàn)原理魏保。
    • 但是由于OpenGL的使?場景?常豐富熬尺,固定管線或存儲著?器?法完成每一 個業(yè)務,這時將相關部分開放成可編程谓罗。
  • 著?器程序(Shader)
    • 將固定渲染管線架構變?yōu)榱丝删幊啼秩竟芫€粱哼。
    • OpenGL在實際調?繪制函數(shù)之前,還需要指定?個由shader編譯成的著色器程序檩咱。常見的著?器主要有頂點著?器(VertexShader)揭措,?段著?器(FragmentShader)/像素著?器(PixelShader),幾何著?(GeometryShader)刻蚯,曲?細分著?器(TessellationShader)蜂筹。片段著?器和像素著?器只是在OpenGL和DX中的不同叫法而已÷梗可惜的是,直到OpenGL ES 3.0不翩,OpenGL ES依然只?持頂點著?器和片段著?器這兩個最基礎的著?器兵扬。
    • OpenGL在處理理shader時,和其他編譯器一樣口蝠。通過編譯器钟、鏈接等步驟,?成了著?器程序(glProgram)妙蔗,著?器程序同時包含了頂點著?器和?段著?器的運算邏輯傲霸。在OpenGL進行繪制的時候,?先由頂點著?器對傳?的頂點數(shù)據(jù)進?運算眉反。再通過圖元裝配昙啄,將頂點轉換為圖元。然后進?光柵化寸五,將圖元這種?量圖形梳凛,轉換為柵格化數(shù)據(jù)。最后梳杏,將柵格化數(shù)據(jù)傳入?段著?器中進?運算韧拒。?段著?器會對柵格化數(shù)據(jù)中的每一個像素進行運算,并決定像素的顏?十性。
  • 頂點著?器(VertexShader)
    • 頂點著?器是OpenGL中?于計算頂點屬性的程序叛溢。
    • ?般來說典型的需要計算的頂點屬性主要包括頂點坐標變換、逐頂點光照運算等等劲适。頂點坐標由?身坐標系轉換到歸一化坐標系的運算楷掉,就是在這里發(fā)?的。
    • 頂點著?器是逐頂點運算的程序霞势,也就是說每個頂點數(shù)據(jù)都會執(zhí)?一次頂點著?器靖诗。當然這是并行的郭怪,并且頂點著?器運算過程中?法訪問其他頂點的數(shù)據(jù)。
  • 片段著?器(FragmentShader)
    • ?段著?器是OpenGL中?于計算?段(像素)顏?的程序刊橘。一般?來處理圖形中每個像素點顏?計算和填充鄙才。
    • ?段著?器是逐像素運算的程序,也就是說每個像素都會執(zhí)?一次?段著?器促绵,當然也是并?的
  • GLSL(OpenGL Shading Language)
    • GLSL著色語?是?來在OpenGL中著?編程的語?攒庵,是在圖形卡的GPU上執(zhí)?的。代替了固定的渲染管線的?部分败晴,使渲染管線中不同層次具有可編程性浓冒。?如:視圖轉換、投影轉換等尖坤。GLSL(GL - Shading Language)的著?器代碼分成2個部分: Vertex Shader(頂點著?器)和Fragment(?斷著?器)
  • 光柵化(Rasterization)
    • 光柵化就是把頂點數(shù)據(jù)轉換為片元的過程稳懒。具有將圖轉化為?個個柵格組成的圖象 的作?,特點是每個元素對應幀緩沖區(qū)中的?像素慢味。
    • 光柵化其實是?種將?何圖元變?yōu)槎S圖像的過程场梆。該過程包含了兩部分的?作。第?部分工作:決定窗?坐標中的哪些整型柵格區(qū)域被基本圖元占?纯路;第?部分?作:分配一個顏?值和?個深度值到各個區(qū)域或油。
    • 把物體的數(shù)學描述以及與物體相關的顏色信息轉換為屏幕上用于對應位置的像素及?于填充像素的顏?,這個過程稱為光柵化驰唬。這是?個將模擬信號轉化為離散信號的過程顶岸。
  • 紋理(Texture)
    • 紋理可以理解為圖?。 在渲染圖形時需要在頂點圍成的區(qū)域中填充圖?叫编,使得場景更加逼真辖佣。?這?使?的圖?,就是常說的紋理搓逾。只是在OpenGL凌简,我們更加習慣叫紋理,?不是圖?恃逻。
  • 混合(Blending)
    • 在測試階段之后雏搂,如果像素依然沒有被剔除,那么像素的顏?將會和幀緩沖區(qū)中顏?附著上的顏色進?混合寇损,混合的算法可以通過OpenGL的函數(shù)進行指定凸郑。但是OpenGL提供的混合算法有限。如果需要更加復雜的混合算法矛市,一般可以通過片段著?器進?實現(xiàn)芙沥,當然性能會?原?的混合算法差?些。
  • 變換矩陣(Transformation)
    • 例如圖形想發(fā)?平移、縮放而昨、旋轉等變換救氯,就需要使用變換矩陣
  • 投影矩陣(Projection)
    • ?于將3D坐標轉換為?維屏幕坐標,實際線條也將在二維坐標下進行繪制
  • 渲染上屏/交換緩沖區(qū)(SwapBuffer)
    • 渲染緩沖區(qū)?般映射的是系統(tǒng)的資源?如窗?歌憨。如果將圖像直接渲染到窗口對應的渲染緩沖區(qū)着憨,則可以將圖像顯示到屏幕上。
    • 值得注意的是务嫡,如果每個窗?只有?個緩沖區(qū)甲抖,那么在繪制過程中屏幕進?了刷新,窗?可能顯示出不完整的圖像心铃。
    • 為了解決這個問題准谚,常規(guī)的OpenGL程序?少都會有兩個緩沖區(qū)。顯示在屏幕上的稱為屏幕緩沖區(qū)去扣,沒有顯示的稱為離屏緩沖區(qū)柱衔。在一個緩沖區(qū)渲染完成之后,通過將屏幕緩沖區(qū)和離屏緩沖區(qū)交換愉棱,實現(xiàn)圖像在屏幕上顯示唆铐。
    • 由于顯示器的刷新?般是逐?進?的,為了防?交換緩沖區(qū)的時候屏幕上下區(qū)域的圖像分屬于兩個不同的幀羽氮,交換一般會等待顯示器刷新完成的信號,在顯示器器兩次刷新的間隔中進?交換惫恼,這個信號就被稱為垂直同步信號档押,這個技術被稱為垂直同步。
    • 使用了雙緩沖區(qū)和垂直同步技術之后祈纯,由于總是要等待緩沖區(qū)交換之后再進?下?幀的渲染令宿,使得幀率無法完全達到硬件允許的最??平。為了解決這個問題腕窥,引?了三緩沖區(qū)技術粒没。在等待垂直同步時,來回交替渲染兩個離屏的緩沖區(qū)簇爆,?垂直同步發(fā)?生時癞松,屏幕緩沖區(qū)和最近渲染完成的離屏緩沖區(qū)交換,實現(xiàn)充分利利?硬件性能的?的
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末入蛆,一起剝皮案震驚了整個濱河市响蓉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哨毁,老刑警劉巖枫甲,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡想幻,警方通過查閱死者的電腦和手機粱栖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來脏毯,“玉大人闹究,你說我怎么就攤上這事〕冢” “怎么了跋核?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長叛买。 經(jīng)常有香客問我砂代,道長,這世上最難降的妖魔是什么率挣? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任刻伊,我火速辦了婚禮,結果婚禮上椒功,老公的妹妹穿的比我還像新娘捶箱。我一直安慰自己,他們只是感情好动漾,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布丁屎。 她就那樣靜靜地躺著,像睡著了一般旱眯。 火紅的嫁衣襯著肌膚如雪晨川。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天删豺,我揣著相機與錄音共虑,去河邊找鬼。 笑死呀页,一個胖子當著我的面吹牛妈拌,可吹牛的內容都是我干的。 我是一名探鬼主播蓬蝶,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼尘分,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了丸氛?” 一聲冷哼從身側響起音诫,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雪位,沒想到半個月后竭钝,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梨撞,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年香罐,在試婚紗的時候發(fā)現(xiàn)自己被綠了卧波。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡庇茫,死狀恐怖港粱,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情旦签,我是刑警寧澤查坪,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站宁炫,受9級特大地震影響偿曙,放射性物質發(fā)生泄漏。R本人自食惡果不足惜羔巢,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一望忆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧竿秆,春花似錦启摄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至匪燕,卻和暖如春蕾羊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谎懦。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工肚豺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留溃斋,地道東北人界拦。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像梗劫,于是被迫代替她去往敵國和親享甸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355