OpenGL (二)--OpenGL中那些晦澀難懂的名詞昆码、動詞解析

OpenGL中那些晦澀難懂的名詞芳撒、動詞

對于初次接觸圖形處理學(xué),第一個難關(guān)就是要面對大量晦澀難懂的概念未桥,而這些概念也是學(xué)習(xí)OpenGl的第一道門檻笔刹,畢竟這是歪果仁提出的概念,及時翻譯過后也會有一些不好理解的地方冬耿。本文中我將重點解釋一些我自己的理解舌菜,如有偏差可以再下方交流指正。

  • GPU

說起圖形處理亦镶,一定是離不開GPU的日月,因為我們所做的操作袱瓮,最終都會由GPU負責(zé)展示到監(jiān)視器上。而這個過程中就離不開計算爱咬,計算每一個像素點的顏色信息尺借。所以GPU是計算圖像數(shù)據(jù)的單元。
說起計算精拟,在我的理解里CPU就是專門用于做二進制運算的計算單元燎斩、控制單元,可以處理復(fù)雜的邏輯和依賴蜂绎,那為什么還需要GPU呢栅表?

  1. 現(xiàn)在的顯示內(nèi)容越來越復(fù)雜(多邊形、3d师枣、光影怪瓶、甚至是動態(tài)的圖像內(nèi)容),僅僅靠CPU及做圖像數(shù)據(jù)的計算践美,還要做其他工作洗贰,設(shè)備使用起來就會非常卡頓陨倡。
  2. 基于GPU的特性(圖形運算單元):擅長通過并行的方式來進行數(shù)學(xué)計算哆姻,讓我想起了為什么要使用GPU來進行比特幣的“挖礦”操作了。
    所以將邏輯計算交給CPU玫膀,將圖像運算交給GPU矛缨。合理分工,最大程度的提高計算機的性能帖旨。
  3. 通過硬件的角度分析一下兩者的不同:CPU中有計算單元箕昭、也有控制單元,必然導(dǎo)致并發(fā)執(zhí)行能力會比較弱解阅,拋開多核來講落竹,cpu的并發(fā)其實是通過時間片切換來實現(xiàn)的,并不是真正意義上的并發(fā)但是CPU货抄。而GPU中有大量的計算單元述召,可以真正意義的并發(fā)進行數(shù)學(xué)計算,但是并不擅長處理邏輯和依賴蟹地。


  • OpenGL

  1. 首先要知道的是OpenGL是一種跨平臺积暖、跨語言的API規(guī)范,也可以簡單的理解為一套協(xié)議(沒有看到網(wǎng)上有這種解讀怪与,不知道對不對)夺刑。其中規(guī)定了可以操作哪些圖像、圖形API。開發(fā)者就可以通過這套API規(guī)范在各種平臺上操作GPU來實現(xiàn)一些功能遍愿。更加嚴謹?shù)恼f是GPU必須提前滿足OpenGL規(guī)范才可以存淫。
  2. OpenGL本身是規(guī)范,但是想要在具體的平臺沼填、語言下使用還是需要有對應(yīng)的API實現(xiàn)的桅咆。所以說我們用是OpenGL的實現(xiàn)。
  • OpenGL ES

它是OpenGL的三維圖形子子集坞笙,主要是為了滿足:iphone岩饼、ipad等便攜式設(shè)備的特性。作為子集一定是拋棄了很多無需且低效的API羞海,來滿足便攜式設(shè)備的特點。

  • Metal

是蘋果自己開發(fā)的一套用來替換OpenGL ES的API曲管,目的都是為了讓GPU來做事情却邓。畢竟是用別人的規(guī)范會有很多限制,蘋果大大也不會甘愿受制于人院水。而且在OpenGL ES的基礎(chǔ)上做了很多優(yōu)化腊徙,使得3D渲染能力提升了10倍,并且與2018年開始全面使用檬某。

  • 狀態(tài)機

狀態(tài)機就是保存對象在整個生命周期中的各種狀態(tài)撬腾、所需參數(shù),同樣也可以通過狀態(tài)機來進行狀態(tài)恢恼、參數(shù)的修改民傻。

舉例

狀態(tài)機就像是一臺微波爐,它有時間场斑、溫度漓踢、模式等各種參數(shù),當然它也掌握著內(nèi)部食物的加熱漏隐、熟沒熟等情況喧半。你可以通過微波爐來調(diào)解你需要的加熱方式、時間青责,你也可以通過微波爐的面板來知曉選擇了哪種加熱方式挺据、時間,等食物加熱完成后會有提示音來告訴你當前食物已經(jīng)加熱完成脖隶。
當然如果你加熱完成后沒有將各種參數(shù)重置扁耐,下次加熱依舊會使用之前的各種參數(shù)。如果你開啟后沒有關(guān)閉产阱,微波爐也會一直處于工作狀態(tài)做葵。
類比狀態(tài)機也是一樣需要你在開始工作之前,進行各種參數(shù)的設(shè)定心墅,在任務(wù)完成后需要手動關(guān)閉它酿矢。

  • OpenGl上下文

  1. 通過資料知道OpenGl上下文是一個巨大的狀態(tài)機榨乎,其中保存著各種OpenGl工作所需的各種參數(shù)以及狀態(tài)。
  2. 你所寫的當前程序是一個窗口瘫筐,一個窗口對應(yīng)一個上下文蜜暑,而最終都要交付給GPU去處理。
  3. 根據(jù)圖可以看出上下文可以共享GPU的緩存等資源
graph TD
c(客戶端1) --> b(OpenGL上下文1)
e(客戶端2) --> d(OpenGL上下文2) 
g(客戶端3) -->f(OpenGL上下文3)
b --> a[GPU]
d --> a[GPU]
f --> a[GPU]
  • 渲染

將可以用于展示的圖片策肝、視頻肛捍、可視化控件,繪制到屏幕上的過程之众,其中還包含了圖片的編碼拙毫、解碼工作。這一系列過程叫做渲染棺禾,我理解應(yīng)該是一個動詞缀蹄。

  • 圖元

首先需要明確一個概念圖元,在OpenGl中圖元包含:點膘婶、線缺前、三角形。也就是說我們看到的任何圖形都是由這三個基本元素組成的悬襟。

  • 頂點數(shù)組衅码、頂點緩存區(qū)

  1. 我們看到的圖形都是通過三種圖元組合完成的,而所有圖元的頂點之和就是頂點數(shù)據(jù)脊岳。
  2. 將頂點數(shù)據(jù)保存到內(nèi)存中逝段,就稱為頂點數(shù)組
  3. 將頂點數(shù)據(jù)保存到GPU的顯存中割捅,就稱為頂點緩存區(qū)
  • 管線

從圖片到顯示在屏幕上需要一個過程惹恃。管線就是規(guī)定了整個過程的每一步,并且需要嚴格遵守棺牧。最貼切的比喻就是工廠里的流水線巫糙,很好理解。


這就是OpenGL中一個完成的管線流程颊乘。

在最后一步測試與混合中参淹,實際進行了以下幾步的操作。

固定管線

在OpenGL的早期乏悄,提供了很多API來幫助開發(fā)者快速完成渲染流程浙值。開發(fā)者只需要根據(jù)API傳入對應(yīng)的參數(shù)即可,其實就是在使用一些已經(jīng)創(chuàng)建好的shader(著色器)檩小,但是由于應(yīng)用場景太過單一开呐,適用范圍非常有限。

可編程管線
  1. 通過發(fā)現(xiàn)固定管線的問題,繼而推出了可編程管線筐付,可以在某些位置進行一些自定義編程操作卵惦。
  2. 其實放開自定義功能的只有管線中的頂點著色器、片元(片段)著色器瓦戚。相信以后會開放更多沮尿。
  • 著色器shader

在管線的解釋中已經(jīng)遇到過shader(著色器)這個概念,每種著色器對應(yīng)著不同功能模塊较解。

  • 頂點著色器:負責(zé)對頂點數(shù)據(jù)進行加工畜疾,將頂點信息放入屏幕中
  • 圖元裝配:將所有頂點進行連線
  • 幾何著色器:將已有圖形按照圖元分解
  • 光柵化:找出所有相關(guān)的像素點,把顏色附著上去
  • 片元著色器:對每一個像素點進項顏色處理
固定著色器

和固定管線類似印衔,都是提供編程好的API供開發(fā)者調(diào)用

自定義著色器

就是可以供開發(fā)者可以使用GLSL自定義一些著色器啡捶,其實也只有:頂點著色器、片元著色器

頂點著色器

可以自定義開發(fā)的著色器奸焙,可以將頂點信息進行編程瞎暑。提現(xiàn)在圖像的:位置移動、縮放忿偷、旋轉(zhuǎn)金顿、2D <-> 3D之間的坐標轉(zhuǎn)換臊泌。

片元著色器

可以自定義開發(fā)的著色器鲤桥,可以對每一個像素點進行編程,比如說圖片的銳化度渠概、亮度茶凳、飽和度調(diào)整等。

  • GLSL(OpenGL Shading Language)

  1. GLSL其使用C語言作為基礎(chǔ)高階著色語言播揪,避免了使用匯編語言或硬件規(guī)格語言的復(fù)雜性贮喧。
  2. 使用GLSL對頂點著色器、片元著色器進行自定義編程的編程語言
  • 光柵化

就是將幾何圖形轉(zhuǎn)化為二維圖像(位圖)猪狈,包含兩個步驟:
1.確定哪些像素點被使用箱沦, 將幾何圖元信息轉(zhuǎn)化為像素信息,最終獲得位圖雇庙。

  1. 分配一個顏?值和?個深度值到每個區(qū)域(片元著色器)谓形。
    所有的格子就是光柵化第一步確定的,然后會分配一個顏色到柵格區(qū)疆前。


所有的格子就是光柵化第一步確定的寒跳,然后會分配一個顏色到柵格區(qū)。

  • 紋理(Texture)

紋理可以理解為圖?竹椒。 在渲染圖形時需要在頂點圍成的區(qū)域中填充圖?童太,使得場景更加逼真。?這?使?的圖?,就是常說的紋理书释。只是在OpenGL翘贮,我們更加習(xí)慣叫紋理,?不是圖?征冷。

  • 混合

根據(jù)字面意思理解就是將多種顏色合成一種择膝,而這個合成后的顏色是需要進行計算的。OpenGL中已經(jīng)提供了一些固定的混合算法检激,但是平時開發(fā)中也會使用自定義片元著色器來完成肴捉,但是效率會比固定混合算法差一些。

  • 變換矩陣

在OpenGL中想要圖形發(fā)生平移叔收、縮放齿穗、旋轉(zhuǎn)就需要變換矩陣進行計算。

  • 投影矩陣

  1. 在OpenGL中想要3D坐標轉(zhuǎn)換為2D坐標饺律,就需要投影矩陣進行計算窃页。
  2. 而結(jié)果是由觀察者(camera)的位置、以及圖像位置本身兩者共同決定的复濒。所以想要移動一個圖像位置脖卖,既可以移動觀察者、也可以移動圖像本身巧颈。
  • 顯示流程

由CPU進行邏輯計算處理->將數(shù)據(jù)傳遞給GPU->通過計算單元并行計算后->存入幀緩存區(qū)(顯存)->由視頻控制器將計算好的位圖信息讀取出來->數(shù)模轉(zhuǎn)換(數(shù)字信號轉(zhuǎn)為電子信號)->顯示器顯示

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末畦木,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子砸泛,更是在濱河造成了極大的恐慌十籍,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唇礁,死亡現(xiàn)場離奇詭異勾栗,居然都是意外死亡,警方通過查閱死者的電腦和手機盏筐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門围俘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人琢融,你說我怎么就攤上這事界牡。” “怎么了吏奸?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵欢揖,是天一觀的道長。 經(jīng)常有香客問我奋蔚,道長她混,這世上最難降的妖魔是什么烈钞? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮坤按,結(jié)果婚禮上毯欣,老公的妹妹穿的比我還像新娘。我一直安慰自己臭脓,他們只是感情好酗钞,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著来累,像睡著了一般砚作。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嘹锁,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天葫录,我揣著相機與錄音,去河邊找鬼领猾。 笑死米同,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的摔竿。 我是一名探鬼主播面粮,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼继低!你這毒婦竟也來了熬苍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤郁季,失蹤者是張志新(化名)和其女友劉穎冷溃,沒想到半個月后钱磅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梦裂,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年盖淡,在試婚紗的時候發(fā)現(xiàn)自己被綠了年柠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡褪迟,死狀恐怖冗恨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情味赃,我是刑警寧澤掀抹,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站心俗,受9級特大地震影響傲武,放射性物質(zhì)發(fā)生泄漏蓉驹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一揪利、第九天 我趴在偏房一處隱蔽的房頂上張望态兴。 院中可真熱鬧,春花似錦疟位、人聲如沸瞻润。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绍撞。三九已至,卻和暖如春得院,著一層夾襖步出監(jiān)牢的瞬間楚午,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工尿招, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留矾柜,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓就谜,卻偏偏與公主長得像怪蔑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子丧荐,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353