OpenGL專(zhuān)業(yè)名詞解析

OpenGL上下文context
  • 在應(yīng)?程序調(diào)用任何OpenGL的指令之前戒幔,需要安排首先創(chuàng)建?個(gè)OpenGL的 上下文。這個(gè)上下?是一個(gè)非常龐大的狀態(tài)機(jī)土童,保存了OpenGL中的各種狀態(tài)诗茎,這也是OpenGL指令執(zhí)?的基礎(chǔ)
  • OpenGL的函數(shù)不管在哪個(gè)語(yǔ)言中,都是類(lèi)似C語(yǔ)?一樣的面向過(guò)程的函數(shù)献汗,本質(zhì)上都是對(duì)OpenGL上下文這個(gè)龐?的狀態(tài)機(jī)中的某個(gè)狀態(tài)或者對(duì)象進(jìn)行操作钧排,當(dāng)然你得首先把這個(gè)對(duì)象設(shè)置為當(dāng)前對(duì)象摹迷。因此重抖,通過(guò)對(duì) OpenGL指令的封裝宴偿,是可以將OpenGL的相關(guān)調(diào)用封裝成為?個(gè)面向?qū)ο蟮膱D形API
  • 由于OpenGL上下文是?個(gè)巨大的狀態(tài)機(jī),切換上下文往往會(huì)產(chǎn)?較大的開(kāi)銷(xiāo)刃麸,但是不同的繪制模塊醒叁,可能需要使?完全獨(dú)?的狀態(tài)管理。因此,可以在應(yīng)用程序中分別創(chuàng)建多個(gè)不同的上下?把沼,在不同線(xiàn)程中使?不同的上下?啊易,上下?之間共享紋理、緩沖區(qū)等資源饮睬。這樣的方案租谈,會(huì)?反復(fù)切換上下文,或者?量修改渲染狀態(tài)捆愁,更加合理?效.
OpenGL狀態(tài)機(jī)
  • 狀態(tài)機(jī)是理論上的一種機(jī)器.這個(gè)?常難以理解.所以我們把這個(gè)狀態(tài)機(jī)這么理解.狀態(tài)機(jī)描述了一個(gè)對(duì)象在其生命周期內(nèi)所經(jīng)歷的各種狀態(tài)割去,狀態(tài)間的轉(zhuǎn)變,發(fā)生轉(zhuǎn)變的動(dòng)因昼丑,條件及轉(zhuǎn)變中所執(zhí)行的活動(dòng)呻逆。或者說(shuō)菩帝,狀態(tài)機(jī)是一種行為咖城,說(shuō)明對(duì)象在其生命周期中響應(yīng)事件所經(jīng)歷的狀態(tài)序列以及對(duì)那些狀態(tài)事件的響應(yīng)。因此具有以下特點(diǎn):
    • 有記憶功能呼奢,能記住其當(dāng)前的狀態(tài)
    • 可以接收輸入宜雀,根據(jù)輸入的內(nèi)容和?己的原先狀態(tài),修改?己當(dāng)前狀態(tài)握础,并且可以有對(duì)應(yīng)輸出
    • 當(dāng)進(jìn)?特殊狀態(tài)(停機(jī)狀態(tài))的時(shí)候辐董,便不再接收輸入,停止工作
  • 類(lèi)推到OpenGL中可以這么理解:
    • 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)?停止?fàn)顟B(tài)夸研,不再接收輸入。在程序退出前依鸥,OpenGL總會(huì)先停止?作的
渲染Rendering
  • 將圖形/圖像數(shù)據(jù)轉(zhuǎn)換成3D空間圖像操作叫做渲染
頂點(diǎn)數(shù)組(VertexArray)和頂點(diǎn)緩沖區(qū)(VertexBuffer)
  • 畫(huà)圖一般是先畫(huà)好圖像的骨架,然后再往?架?面填充顏?悼沈,這對(duì)于 OpenGL也是一樣的贱迟。頂點(diǎn)數(shù)據(jù)就是要畫(huà)的圖像的?架,和現(xiàn)實(shí)中不同的 是絮供,OpenGL中的圖像都是由圖元組成衣吠。在OpenGLES中,有3種類(lèi)型的圖元:點(diǎn)壤靶、線(xiàn)缚俏、三?形。那這些頂點(diǎn)數(shù)據(jù)最終是存儲(chǔ)在哪?的呢?開(kāi)發(fā)者可以選擇設(shè)定函數(shù)指針,在調(diào)?繪制方法的時(shí)候忧换,直接由內(nèi)存?zhèn)?頂點(diǎn)數(shù)據(jù)恬惯,也就是說(shuō)這部分?jǐn)?shù)據(jù)之前是存儲(chǔ)在內(nèi)存當(dāng)中的,被稱(chēng)為頂點(diǎn)數(shù)組亚茬。?性能更?高的做法是酪耳,提前分配?塊顯存,將頂點(diǎn)數(shù)據(jù)預(yù)先傳入到顯存當(dāng)中刹缝。這部分的顯存碗暗,就被稱(chēng)為頂點(diǎn)緩沖區(qū)
  • 頂點(diǎn)指的是我們?cè)诶L制一個(gè)圖形時(shí),它的頂點(diǎn)位置數(shù)據(jù).而這個(gè)數(shù)據(jù)可以直接存儲(chǔ)在數(shù)組中或者將其緩存到GPU
管線(xiàn)
  • 在OpenGL下渲染圖形,就會(huì)有經(jīng)歷?個(gè)?個(gè)節(jié)點(diǎn).?這樣的操作可以理解為管線(xiàn).可以想象成流?線(xiàn).每個(gè)任務(wù)類(lèi)似流水線(xiàn)般執(zhí)?.任務(wù)之間有先后順序. 管線(xiàn)是一個(gè)抽象的概念,之所以稱(chēng)之為管線(xiàn)是因?yàn)轱@卡在處理數(shù)據(jù)的時(shí)候是按照一個(gè)固定的順序來(lái)的梢夯,而且嚴(yán)格按照這個(gè)順序言疗,這個(gè)順序是不不能打破的
固定管線(xiàn)/存儲(chǔ)著色器
  • 在早期的OpenGL 版本,它封裝了很多種著?器程序塊內(nèi)置的一段包含了光照、坐標(biāo)變換颂砸、裁剪等諸多功能的固定shader程序來(lái)完成,幫助開(kāi)發(fā)者來(lái)完成圖形的渲染. 而開(kāi)發(fā)者只需要傳入相應(yīng)的參數(shù),就能快速完成圖形的渲染. 類(lèi)似于iOS開(kāi)發(fā)會(huì)封裝很多API,而我們只需要調(diào)用,就可以實(shí)現(xiàn)功能.不需要關(guān)注底層實(shí)現(xiàn)原理
  • 但是由于OpenGL 的使用場(chǎng)景?常豐富,固定管線(xiàn)或存儲(chǔ)著?器無(wú)法完成每一個(gè)業(yè)務(wù).這時(shí)就可將相關(guān)部分開(kāi)放成可編程的非固定管線(xiàn)
著?器程序Shader
  • 為了全面的將固定渲染管線(xiàn)架構(gòu)變?yōu)榱丝删幊啼秩竟芫€(xiàn)噪奄,因此,OpenGL在 際調(diào)用繪制函數(shù)之前沾凄,還需要指定?個(gè)由shader編譯成的著?器程序梗醇。常見(jiàn)的著?器主要有頂點(diǎn)著?器(VertexShader),?元著?器 (FragmentShader)/像素著?器(PixelShader)撒蟀,幾何著?器 (GeometryShader)叙谨,曲?細(xì)分著?器(TessellationShader)。?元著?器和像素著?器只是在OpenGL和DX中的不同叫法而已保屯∈指海可惜的是,直到 OpenGLES 3.0姑尺,依然只?持了頂點(diǎn)著?器和?元著?器這兩個(gè)最基礎(chǔ)的著?器竟终。
  • OpenGL在處理shader時(shí),和其他編譯器一樣切蟋。通過(guò)編譯统捶、鏈接等步驟,?成了著?器程序(glProgram)柄粹,著?器程序同時(shí)包含了頂點(diǎn)著?器和?元著?器的運(yùn)算邏輯喘鸟。在OpenGL進(jìn)?繪制的時(shí)候,首先由頂點(diǎn)著?器對(duì)傳?的頂點(diǎn)數(shù)據(jù)進(jìn)?運(yùn)算驻右。再通過(guò)圖元裝配什黑,將頂點(diǎn)轉(zhuǎn)換為圖元。然后進(jìn)?光柵化堪夭,將圖元這種?量圖形愕把,轉(zhuǎn)換為柵格化數(shù)據(jù)拣凹。最后,將柵格化數(shù)據(jù)傳入?元著?器中進(jìn)?運(yùn)算恨豁。?元著?器會(huì)對(duì)柵格化數(shù)據(jù)中的每一個(gè)像素進(jìn)?運(yùn)算嚣镜,并決定像素的顏?
頂點(diǎn)著?器VertexShader
  • ?般用來(lái)處理圖形每個(gè)頂點(diǎn)變換(旋轉(zhuǎn)/平移/投影等)
  • 頂點(diǎn)著?器是OpenGL中?于計(jì)算頂點(diǎn)屬性的程序。頂點(diǎn)著?器是逐頂點(diǎn)運(yùn)算的程序圣絮,也就是說(shuō)每個(gè)頂點(diǎn)數(shù)據(jù)都會(huì)執(zhí)?一次頂點(diǎn)著?器祈惶,當(dāng)然這是并行的,并且頂點(diǎn)著?器運(yùn)算過(guò)程中無(wú)法訪(fǎng)問(wèn)其他頂點(diǎn)的數(shù)據(jù)
  • ?般來(lái)說(shuō)典型的需要計(jì)算的頂點(diǎn)屬性主要包括頂點(diǎn)坐標(biāo)變換扮匠、逐頂點(diǎn)光照運(yùn)算等等捧请。頂點(diǎn)坐標(biāo)由自身坐標(biāo)系轉(zhuǎn)換到歸一化坐標(biāo)系的運(yùn)算,就是在這里發(fā)生的
?元著?器 FragmentShader
  • 一般用來(lái)處理圖形中每個(gè)像素點(diǎn)顏?計(jì)算和填充
  • ?元著?器是OpenGL中用于計(jì)算?元(像素)顏?的程序棒搜。?元著?器是逐像素運(yùn)算的程序疹蛉,也就是說(shuō)每個(gè)像素都會(huì)執(zhí)?一次?元著?器,當(dāng)然也是并?的
GLSL(OpenGL Shading Language)
  • OpenGL著色語(yǔ)言(OpenGL Shading Language)是用來(lái)在OpenGL中著?編程的語(yǔ)言力麸,也即開(kāi)發(fā)?員寫(xiě)的短小的自定義程序可款,他們是在圖形卡的GPU上執(zhí)行的,代替了固定的渲染管線(xiàn)的?部分克蚂,使渲染管線(xiàn)中不同層次具有可編程性闺鲸。比如:視圖轉(zhuǎn)換、投影轉(zhuǎn)換等埃叭。GLSL(GL Shading Language)的著?器代碼分成2個(gè)部分: Vertex Shader(頂點(diǎn)著?器)和Fragment(?元著?器)
光柵化
  • 是把頂點(diǎn)數(shù)據(jù)轉(zhuǎn)換為片元的過(guò)程摸恍,具有將圖轉(zhuǎn)化為一個(gè)個(gè)柵格組成的圖象的作用,特點(diǎn)是每個(gè)元素對(duì)應(yīng)幀緩沖區(qū)中的一像素
  • 光柵化就是把頂點(diǎn)數(shù)據(jù)轉(zhuǎn)換為片元的過(guò)程赤屋。片元中的每一個(gè)元素對(duì)應(yīng)于幀緩沖區(qū)中的?個(gè)像素
紋理
  • 紋理可以理解為圖片.在渲染圖形時(shí)需要在其編碼填充圖片,為了使得場(chǎng)景更加逼真.而這里使?的圖片,就是常說(shuō)的紋理.但是在OpenGL,我們更加習(xí)慣叫紋理,而不是圖?
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末立镶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子类早,更是在濱河造成了極大的恐慌媚媒,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涩僻,死亡現(xiàn)場(chǎng)離奇詭異缭召,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)逆日,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)恼琼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人屏富,你說(shuō)我怎么就攤上這事⊥苈保” “怎么了狠半?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵噩死,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我神年,道長(zhǎng)已维,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任已日,我火速辦了婚禮垛耳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘飘千。我一直安慰自己堂鲜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布护奈。 她就那樣靜靜地躺著缔莲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪霉旗。 梳的紋絲不亂的頭發(fā)上痴奏,一...
    開(kāi)封第一講書(shū)人閱讀 49,741評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音厌秒,去河邊找鬼读拆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鸵闪,可吹牛的內(nèi)容都是我干的檐晕。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼岛马,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼棉姐!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起啦逆,我...
    開(kāi)封第一講書(shū)人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤伞矩,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后夏志,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體乃坤,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年沟蔑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了湿诊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瘦材,死狀恐怖厅须,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情食棕,我是刑警寧澤朗和,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布错沽,位于F島的核電站,受9級(jí)特大地震影響眶拉,放射性物質(zhì)發(fā)生泄漏千埃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一忆植、第九天 我趴在偏房一處隱蔽的房頂上張望放可。 院中可真熱鬧,春花似錦朝刊、人聲如沸耀里。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)备韧。三九已至,卻和暖如春痪枫,著一層夾襖步出監(jiān)牢的瞬間织堂,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工奶陈, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留易阳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓吃粒,卻偏偏與公主長(zhǎng)得像潦俺,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子徐勃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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