OpenGL常見概念解析(1)

1.1位圖

亦稱為點陣圖像或柵格圖像柿隙,是由稱作像素(圖片元素)的單個點組成的。這些點可以進行不同的排列和染色以構成圖樣鲫凶。當放大位圖時禀崖,可以看見賴以構成整個圖像的無數(shù)單個方塊。擴大位圖尺寸的效果是增大單個像素螟炫,從而使線條和形狀顯得參差不齊波附。然而,如果從稍遠的位置觀看它昼钻,位圖圖像的顏色和形狀又顯得是連續(xù)的掸屡。由于每一個像素都是單獨染色的,您可以通過以每次一個像素的頻率操作選擇區(qū)域而產(chǎn)生近似相片的逼真效果然评,諸如加深陰影和加重顏色仅财。縮小位圖尺寸也會使原圖變形碗淌,因為此舉是通過減小像素來使整個圖像變小的盏求。同樣,由于位圖圖像是以排列的像素集合體形式創(chuàng)建的亿眠,所以不能單獨操作(如移動)局部位圖碎罚。

舉例:比如一個位圖的寬高為120*120px , 那么一個像素包含四個顏色分量RGBA,也就是占四個字節(jié)纳像,一個字節(jié)占8位bit

120 * 120 = 14400 -> RGBA -> 14400 * 4 = 位圖 (紋理)

映射: 對應關系


1.2 管線

在OpenGL下渲染圖形荆烈,就會經(jīng)歷?個?個的節(jié)點。而這樣的操作可以理理解管線竟趾。就像一個流?線憔购,任務按照先后順序依次執(zhí)行。管線是?個抽象的概念潭兽,之所以稱之為管線是因為顯卡在處理數(shù)據(jù)的時候是按照一個固定的順序來的倦始,而且嚴格按照這個順序。

核心要點:

任務嚴格按照順序依次執(zhí)行山卦。


1.3 固定管線

在早期的OpenGL版本鞋邑,封裝了多種著色器程序塊诵次,內(nèi)置了一段包含了光照、坐標變換枚碗、裁剪等諸多功能的固定shader程序來完成逾一。來幫助開發(fā)者來完成圖形的渲染。開發(fā)者只需要傳入相應的參數(shù)肮雨,就能快速完成圖形的渲染遵堵。類似于iOS開發(fā)會封裝很多API,而我們只需要調(diào)?怨规,就可以實現(xiàn)功能陌宿,不需要關注底層實現(xiàn)原理。(就類似于調(diào)用一些別人封裝好的API一樣)

但是由于OpenGL的使?場景?常豐富波丰,固定管線或存儲著?器?法完成每一 個業(yè)務壳坪,這時將相關部分開放成可編程。

核心要點:

早期的OpenGL版本封裝的輔助快速開發(fā)的著色器程序塊掰烟。由于提供的功能有限爽蝴,后期變成了可編程的形式。


1.4著色器

就全?的將固定渲染管線架構變?yōu)榱丝删幊啼秩竟芫€纫骑。因此蝎亚,OpenGL在實際調(diào)?繪制函數(shù)之前,還需要指定?個由shader編譯成的著?器程序先馆。常?的著?器主要有頂點著?器(VertexShader)发框,?元著?器(FragmentShader)/像素著?器(PixelShader),?何著?器(GeometryShader)磨隘,曲?細分著?器(TessellationShader)缤底。?段著?器和像素著?器只是在OpenGL和DX中的不同叫法?已顾患》妫可惜的是,直到OpenGLES 3.0江解,依然只?持了頂點著?器和?段著?器這兩個最基礎的著?器设预。

OpenGL在處理shader時,和其他編譯器?樣犁河。通過編譯鳖枕、鏈接等步驟,?成了著?器程序(glProgram)桨螺,著?器程序同時包含了頂點著?器和?段著?器的運算邏輯宾符。在OpenGL進?繪制的時候,?先由頂點著?器對傳?的頂點數(shù)據(jù)進?運算灭翔。再通過圖元裝配魏烫,將頂點轉換為圖元。然后進?光柵化,將圖元這種?量圖形哄褒,轉換為柵格化數(shù)據(jù)稀蟋。最后,將柵格化數(shù)據(jù)傳??段著?器中進?運算呐赡。?段著?器會對柵格化數(shù)據(jù)中的每?個像素進?運算退客,并決定像素的顏?


1.5頂點著色器

? ?般?來處理圖形每個頂點變換(旋轉/平移/投影等)

? 頂點著?器是OpenGL中?于計算頂點屬性的程序。頂點著?器是逐頂點運算的程序链嘀,也就是說每個頂點數(shù)據(jù)都會執(zhí)??次頂點著?器萌狂,當然這是并?的,并且頂點著?器運算過程中?法訪問其他頂點的數(shù)據(jù)? ?般來說典型的需要計算的頂點屬性主要包括頂點坐標變換怀泊、逐頂點光照運算等等粥脚。頂點坐標由?身坐標系轉換到歸?化坐標系的運算,就是在這?發(fā)?的包个。

核心要點:

1.確定位置 2.縮放/平移/旋轉位置換算 3.將3D圖形數(shù)據(jù)轉換成2D(投影換算)刷允,顯示在手機屏幕上


1.6?元著?器

? ?般?來處理圖形中每個像素點顏?計算和填充

? ?段著?器是OpenGL中?于計算?段(像素)顏?的程序。?段著?器是逐像素運算的程序碧囊,也就是說每個像素都會執(zhí)??次?段著?器树灶,當然也是并?的

核心要點:

片元著色器處理的是一個個片元,也就是像素點糯而,執(zhí)行片段著色器天通,并行運算,當我們想對位圖進行加濾鏡等等操作熄驼,實際上就是修改片元像寒,后面會講到OpenGL ES,用它來處理


1.6光柵化

? 是把頂點數(shù)據(jù)轉換為?元的過程瓜贾,具有將圖轉化為?個個柵格組成的圖象的作?诺祸,特點是每個元素對應幀緩沖區(qū)中的?像素, 光柵化就是把頂點數(shù)據(jù)轉換為?元的過程祭芦。?元中的每?個元素對應于幀緩沖區(qū)中的?個像素筷笨。

? 光柵化其實是?種將?何圖元變?yōu)?維圖像的過程。該過程包含了兩部分的?作龟劲。第?部分?作:決定窗?坐標中的哪些整型柵格區(qū)域被基本圖元占?胃夏;第?部分?作:分配?個顏?值和?個深度值到各個區(qū)域。光柵化過程產(chǎn)?的是?元 把物體的數(shù)學描述以及與物體相關的顏?信息轉換為屏幕上?于對應位置的像素及?于填充像素的顏?昌跌,這個過程稱為光柵化仰禀,這是?個將模擬信號轉化為離散信號的過程

核心要點:

光柵化就是把頂點數(shù)據(jù)轉換為片元的過程。該過程包含了兩部分的?作:①決定窗?坐標中的哪些整型柵格區(qū)域被基本圖元占?;②分配一個顏?值和?個深度值到各個區(qū)域。


1.7OpenGL上下文

在應用程序調(diào)用任何OpenGL的指令之前,需要安排首先創(chuàng)建一個OpenGL的上下文尼变。這個上下文是一個非常龐大的狀態(tài)機亥宿,保存了OpenGL中的各種狀態(tài)卸勺,這也是OpenGL凱指令執(zhí)行的基礎?

OpenGL的函數(shù)不管在哪個語言中,都是類似C語言一樣的面向過程的函數(shù)烫扼,本質(zhì)上都是對OpenGL上下文這個龐大的狀態(tài)機中的某個狀態(tài)或者對象進行操作曙求,當然你得首先把這個對象設置為當前對象。因此映企,通過對OpenGL指令的封裝悟狱,是可以將OpenGL的相關調(diào)用封裝成為一個面向?qū)ο蟮膱D形API

由于OpenGL上下文是一個巨大的狀態(tài)機,切換上下文往往會產(chǎn)生較大的開銷堰氓,但是不同的繪制模塊挤渐,可能需要使用完全獨立的狀態(tài)管理。因此双絮,可以在應用程序中分別創(chuàng)建多個不同的上下文浴麻,在不同線程中使用不同的上下文,上下文之間共享紋理囤攀、緩沖區(qū)等資源软免。這樣的方案,會比反復切換上下文焚挠,或者大量修改渲染狀態(tài)膏萧,更加合理高效的.

簡單的說上下文就是一個狀態(tài)機,保存當前的所有狀態(tài)

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蝌衔,一起剝皮案震驚了整個濱河市榛泛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌噩斟,老刑警劉巖曹锨,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異亩冬,居然都是意外死亡艘希,警方通過查閱死者的電腦和手機硼身,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門硅急,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人佳遂,你說我怎么就攤上這事营袜。” “怎么了丑罪?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵荚板,是天一觀的道長凤壁。 經(jīng)常有香客問我,道長跪另,這世上最難降的妖魔是什么拧抖? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮免绿,結果婚禮上唧席,老公的妹妹穿的比我還像新娘。我一直安慰自己嘲驾,他們只是感情好淌哟,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著辽故,像睡著了一般徒仓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上誊垢,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天掉弛,我揣著相機與錄音,去河邊找鬼喂走。 笑死狰晚,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的缴啡。 我是一名探鬼主播壁晒,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼业栅!你這毒婦竟也來了秒咐?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤碘裕,失蹤者是張志新(化名)和其女友劉穎携取,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帮孔,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡雷滋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了文兢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晤斩。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖姆坚,靈堂內(nèi)的尸體忽然破棺而出澳泵,到底是詐尸還是另有隱情,我是刑警寧澤兼呵,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布兔辅,位于F島的核電站腊敲,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏维苔。R本人自食惡果不足惜碰辅,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望介时。 院中可真熱鬧乎赴,春花似錦、人聲如沸潮尝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勉失。三九已至羹蚣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間乱凿,已是汗流浹背顽素。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留徒蟆,地道東北人胁出。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像段审,于是被迫代替她去往敵國和親全蝶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355