OpenGL 入門篇

OpenGL入門篇

本篇,我會初步介紹OpenGL在繪圖中的角色定位李命,以及相關(guān)專業(yè)名詞的介紹侄非。在部分專業(yè)名詞后面我都附有較詳細(xì)的解說連結(jié)蕉汪,若為初學(xué)請先理解本篇概觀流译,再往細(xì)節(jié)深入。

什么是OpenGL? OpenGL本質(zhì)上是驅(qū)動GPU繪圖的一套框架者疤。

作為底層驅(qū)動GPU繪圖的框架福澡,OpenGL可以達(dá)到跨平臺的特性。在iOS里面CoreGraphics, CoreAnimation, CoreImage計算繪圖后驹马,最后其實也是要調(diào)度OpenGL/Metal去驅(qū)動GPU繪制革砸。同理,Android & Windows也是在調(diào)度OpenGL基礎(chǔ)上提供繪圖API給開發(fā)者使用糯累。

OpenGL角色定位

由上圖可知算利,所有圖像最終會由OpenGL調(diào)動GPU繪制,那么問題來了泳姐,我們有什么理由需要去寫底層的OpenGL而不直接用上層所提供的繪圖API繪制就好了呢效拭?

  1. 效能考量:上層API主要是利用CPU資源繪圖,OpenGL則是透過GPU繪圖胖秒。在用途上缎患,CPU是串行運算,善于處理依賴性高的任務(wù)阎肝、GPU是并行運算挤渔,適合處理依賴性低的任務(wù)。而屏幕上各像素點結(jié)果的運算风题,互相之間是不依賴的判导,因此OpenGL可以達(dá)到更高效的運算結(jié)果。

  2. 跨平臺共用:同樣的著色器代碼沛硅,可以同時提供android & iOS平臺使用眼刃。

  3. 自定義效果:上層繪圖我們受限于iOS提供的API,人家沒有提供的效果稽鞭,我們無法實現(xiàn)鸟整。而OpenGl我們可以自定義著色器編寫我們想要的特效。

專業(yè)名詞解析

1. OpenGL 上下? ( Context )

OpenGL的上下文是一個巨大的狀態(tài)機朦蕴。保存了OpenGL中的各種狀態(tài)篮条,也是OpenGL指令執(zhí)?的基礎(chǔ)。

任何畫面在被呈現(xiàn)出來之前吩抓,都要經(jīng)過一系列的渲染處理涉茧。而這渲染過程中是否開啟光照計算、顏色混合疹娶、深度測試等伴栓,就是由上下文中儲存的狀態(tài)決定。

2. OpenGL 狀態(tài)機(State Machine)

狀態(tài)機可以理解為一臺可以保存狀態(tài),并根據(jù)當(dāng)前狀態(tài)進(jìn)行相應(yīng)輸出的機器钳垮,他具有以下特性惑淳。

  • 記憶功能,保存當(dāng)前狀態(tài)

  • 接收輸入饺窿,修改當(dāng)前狀態(tài)歧焦,或根據(jù)當(dāng)前狀態(tài)進(jìn)行輸出

  • 當(dāng)進(jìn)?特殊狀態(tài)(停機狀態(tài))時,不再接收輸?肚医,停?工作

3. 頂點數(shù)組( VertexArray ) 與圖元(primitive)

頂點數(shù)據(jù)決定圖像的輪廓绢馍,圖元裝配方式?jīng)Q定頂點的連線方式,最終形成圖元肠套。

在OpenGL里面舰涌,圖元是形成圖像的基本單位,共有三種類型:點你稚、線瓷耙、三角形。

頂點只能決定位置刁赖、圖元裝配方式才能決定圖形的樣子哺徊。補充三角形圖元裝配方式詳解

頂點數(shù)據(jù)與圖元裝配

5. 管線(Pipeline)

管線就是圖形渲染的流程,下圖為OpenGL 4.3 版本的管線乾闰。之所以稱之為管線是因為顯卡在處理理數(shù)據(jù)的時候是按照一個固定的順序來的,?且嚴(yán)格按照這個順序盈滴。

本篇中只會重點介紹 "頂點著色器" 以及 "片元著色器" 涯肩,因為實際上,目前OpenGL只開放了這兩種著色器給開發(fā)者自行編程巢钓。[各著色器職責(zé)詳解補充]

管線

6. 頂點著色? (VertexShader)

頂點著?器是OpenGL中?于計算頂點屬性的程序病苗。用以呈現(xiàn)旋轉(zhuǎn)/平移/投影等,是我們唯二能夠以GLSL自定義的著色器症汹。

頂點著?器是逐頂點運算的程序硫朦,也就是說每個頂點數(shù)據(jù)都會執(zhí)?一次頂點著?器。當(dāng)然這是并行的背镇,并且頂點著?器運算過程中?法訪問其他頂點的數(shù)據(jù)咬展。

7. 片段著?器(FragmentShader)

?段著?器是OpenGL中?于計算?段(像素)顏?的程序。用以呈現(xiàn)陰影瞒斩、高光破婆、半透明、深度等胸囱,也是我們唯二能夠以GLSL自定義的著色器祷舀。

?段著?器是逐像素運算的程序,也就是說每個像素都會執(zhí)?一次?段著?器,當(dāng)然也是并?的裳扯。

片元中的每一個元素對應(yīng)幀緩沖區(qū)中的?像素抛丽。

片段著色器又稱為片元著色器、像素著色器饰豺。

8. 光柵化(Rasterization)

頂點經(jīng)過圖元裝配產(chǎn)生的圖元會傳給光柵器亿鲜,光柵器再將圖元轉(zhuǎn)換為片元,這個過程稱為光柵化哟忍。

這個過程包含兩部分工作狡门。第?部分工作:決定窗?坐標(biāo)中的哪些整型柵格區(qū)域被基本圖元占?;第?部分?作:分配一個顏?值和?個深度值到各個區(qū)域锅很。示意圖如下:

光柵化

9. GLSL(OpenGL Shading Language)

OpenGL著?語言(OpenGL Shading Language)是?來在OpenGL中著?編程的語言其馏,即開發(fā)?員寫的短小的?定義程序,他們是在圖形卡的GPU (Graphic Processor Unit圖形處理單元)上執(zhí)行的爆安,代替了固定渲染管線的一部分叛复,使渲染管線中不同層次具有可編程性。?如:視圖轉(zhuǎn)換扔仓、投影轉(zhuǎn)換等褐奥。GLSL(GL Shading Language)的著?器代碼分成2個部分: Vertex Shader(頂點著?器)和Fragment(?段著色器)

10. 紋理(Texture)

紋理可以理解為圖?。 在渲染圖形時需要在頂點圍成的區(qū)域中填充圖?翘簇,使得場景更加逼真撬码。?這?使?的圖?,就是常說的紋理版保。只是在OpenGL呜笑,我們更加習(xí)慣叫紋理,?不是圖?彻犁。

11. 混合(Blending)

在測試階段之后叫胁,如果像素依然沒有被剔除,那么像素的顏?將會和幀緩沖區(qū)中顏?附著上的顏色進(jìn)?混合汞幢,混合的算法可以通過OpenGL的函數(shù)進(jìn)行指定驼鹅。但是OpenGL提供的混合算法有限。如果需要更加復(fù)雜的混合算法森篷,一般可以通過片段著?器進(jìn)?實現(xiàn)输钩,當(dāng)然性能會?原?的混合算法差?些。

12.矩陣(Matrix)

矩陣是一種數(shù)據(jù)結(jié)構(gòu)仲智,是OpenGL應(yīng)用來改變頂點位置的主要方式张足,依功能分為 "表示位置的矩陣(頂點 與 模型數(shù)據(jù))", "表示位置如何變換的矩陣(變換矩陣)"。

OpenGL最終的頂點位置是由 投影矩陣,視圖矩陣,模型矩陣 共同決定的坎藐。[矩陣章節(jié)]

最終頂點 = 投影矩陣 * 視圖矩陣 * 模型矩陣 * 頂點

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末为牍,一起剝皮案震驚了整個濱河市哼绑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌碉咆,老刑警劉巖抖韩,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異疫铜,居然都是意外死亡茂浮,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門壳咕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來席揽,“玉大人,你說我怎么就攤上這事谓厘』闲撸” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵竟稳,是天一觀的道長属桦。 經(jīng)常有香客問我,道長他爸,這世上最難降的妖魔是什么聂宾? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮诊笤,結(jié)果婚禮上系谐,老公的妹妹穿的比我還像新娘。我一直安慰自己讨跟,他們只是感情好蔚鸥,可當(dāng)我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著许赃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪馆类。 梳的紋絲不亂的頭發(fā)上混聊,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機與錄音乾巧,去河邊找鬼句喜。 笑死,一個胖子當(dāng)著我的面吹牛沟于,可吹牛的內(nèi)容都是我干的咳胃。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼旷太,長吁一口氣:“原來是場噩夢啊……” “哼展懈!你這毒婦竟也來了销睁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤存崖,失蹤者是張志新(化名)和其女友劉穎冻记,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體来惧,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡冗栗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了供搀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片隅居。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖葛虐,靈堂內(nèi)的尸體忽然破棺而出胎源,到底是詐尸還是另有隱情,我是刑警寧澤挡闰,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布乒融,位于F島的核電站,受9級特大地震影響摄悯,放射性物質(zhì)發(fā)生泄漏赞季。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一奢驯、第九天 我趴在偏房一處隱蔽的房頂上張望申钩。 院中可真熱鬧,春花似錦瘪阁、人聲如沸撒遣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽义黎。三九已至,卻和暖如春豁跑,著一層夾襖步出監(jiān)牢的瞬間廉涕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工艇拍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留狐蜕,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓卸夕,卻偏偏與公主長得像层释,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子快集,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容