一混移、opengl 常用術(shù)語(yǔ)

常用的圖形api的分類(lèi)

OpenGL(Open Graphics Library)是個(gè)跨編程語(yǔ)言、跨平臺(tái)的編程圖形程序接口冻璃,它將計(jì)算機(jī)的資源抽象稱(chēng)為一個(gè)OpenGL的對(duì)象响谓,對(duì)這些資源的操作抽象為一個(gè)的OpenGL指令。
OpenGL ES (OpenGL for Embedded Systems)是 OpenGL三維圖形 API 的子集省艳,針對(duì)?手機(jī)娘纷、 PDA和游戲主機(jī)等嵌入式設(shè)備而設(shè)計(jì),去除了了許多不不必要和性能較低的API接口跋炕。
DirectX 是由很多API組成的赖晶,DirectX并不不是個(gè)單純的圖形API. 最重要的是DirectX是屬于 Windows上個(gè)多媒體處理理API。并不支持Windows以外的平臺(tái)辐烂,所以不是跨平臺(tái)框架遏插, 按照性 質(zhì)分類(lèi),可以分為四大部分纠修,顯示部分胳嘲、聲音部分、輸入部分和?網(wǎng)絡(luò)部分扣草。
Metal : Apple為游戲開(kāi)發(fā)者推出了了新的平臺(tái)技術(shù)Metal了牛,該技術(shù)能夠?yàn)?3D 圖像提?高 10 倍的渲染性能颜屠。Metal是Apple為了了解決3D渲染?而推出的框架。

1. OpenGL 狀態(tài)機(jī)

狀態(tài)機(jī)一般可以理解為一臺(tái)可以保存狀態(tài)鹰祸,并根據(jù)當(dāng)前狀態(tài)進(jìn)行輸出的機(jī)器甫窟。

核心要點(diǎn)
  • 記憶功能,保存當(dāng)前狀態(tài)
  • 接受輸入蛙婴,修改當(dāng)前狀態(tài)粗井,或者根據(jù)當(dāng)前狀態(tài)進(jìn)行輸出
  • 根據(jù)特殊狀態(tài)(停機(jī)狀態(tài)),不再接受和輸出街图,停止工作浇衬。

2.OpenGL上下文

在應(yīng)?程序調(diào)?任何OpenGL的指令之前,首先需要?jiǎng)?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)行操作滚朵。通過(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è)不同的上下文,在不同線程中使?不同的上下文漏峰,上下?之間共享紋理糠悼、緩沖區(qū)等資源。這樣的?方案浅乔,會(huì)?比反復(fù)切換上下?倔喂,或者?量修改渲染狀態(tài),更加合理高效靖苇。

3. 渲染

將圖形圖像數(shù)據(jù)轉(zhuǎn)換為2d空間圖像操作叫做渲染席噩。

4. 頂點(diǎn)數(shù)組、定點(diǎn)緩沖區(qū)

  • 畫(huà)圖?般是先畫(huà)好圖像的?架贤壁,然后再往?架??填充顏?悼枢,這對(duì)于OpenGL也是?樣的。頂點(diǎn)數(shù)據(jù)就是要畫(huà)的圖像的?架脾拆,和現(xiàn)實(shí)中不同的是萧芙,OpenGL中的圖像都是由圖元組成给梅。在OpenGL ES中,有3種類(lèi)型的圖元:點(diǎ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ù)先傳?到顯存中瓮床,這部分顯存盹舞,成為頂點(diǎn)緩沖區(qū)。
  • 頂點(diǎn)是指在我們繪制一個(gè)圖形時(shí)隘庄,她的頂點(diǎn)位置數(shù)據(jù)踢步,而這個(gè)位置數(shù)據(jù)可以直接存儲(chǔ)在數(shù)組中或者將其緩存到GPU中。

5丑掺、管線

在OpenGL下渲染圖形获印,就會(huì)有經(jīng)歷一個(gè)個(gè)節(jié)點(diǎn),而這樣的操作可以理解為管線街州,大家可以想象成流水線兼丰。每個(gè)任務(wù)類(lèi)似流水線般執(zhí)行任務(wù),任務(wù)之間有先后順序唆缴,管線是一個(gè)抽象的概念鳍征,之所以成為管線是因?yàn)?顯卡在處理數(shù)據(jù)的時(shí)候是按照一個(gè)固定的順序來(lái)的,而且嚴(yán)格按照這個(gè)順序來(lái)的琐谤,就像水從一根管子的一頭流向另外一頭蟆技,這個(gè)順序是不能打破的

6、著色器程序shader

  • 就全?的將固定渲染管線架構(gòu)變?yōu)榱丝删幊啼秩竟芫€斗忌。因此质礼,OpenGL在實(shí)際調(diào)?繪制函數(shù)之前,還需要指定?個(gè)由shader編譯成的著?器程序织阳。常?的著?器主要有頂點(diǎn)著?器(VertexShader)眶蕉,?段著?器(FragmentShader)/像素著?器(PixelShader),?何著?器(GeometryShader)唧躲,曲?細(xì)分著?器(TessellationShader)造挽。?段著?器和像素著?器只是在OpenGL和DX中的不同叫法?已碱璃。目前,只支持頂點(diǎn)著色器和片段著色器兩個(gè)基本的著色器饭入。
  • 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)算觅赊,并決定像素的顏?。

固定管線/存儲(chǔ)著色器

  • 在早期的OpenGL 版本,它封裝了很多種著?器程序塊內(nèi)置的?段包含了光照琼稻、坐標(biāo)變換吮螺、裁剪等等諸多功能的固定shader程序來(lái)完成,來(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)景?常豐富,固定管線或存儲(chǔ)著?器?法完成每?個(gè)業(yè)務(wù).這時(shí)將相關(guān)部分開(kāi)放成可編程

頂點(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è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ā)生的泉蝌。

片元著色器

  • ?般?來(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 (Graphic Processor Unit圖形處理單元)上執(zhí)?的,代替了固定的渲染管線的?部分劫映,使渲染管線中不同層次具有可編程性违孝。?如:視圖轉(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è)珊格組成圖像的過(guò)程喇喉,特點(diǎn)是每個(gè)元素對(duì)應(yīng)幀緩沖中的一個(gè)像素。
  • 光柵化就是頂點(diǎn)數(shù)據(jù)轉(zhuǎn)換為片元數(shù)據(jù)的過(guò)程筹燕,片元中的每一個(gè)像素點(diǎn)對(duì)應(yīng)幀緩沖的一個(gè)像素轧飞。
  • 光柵化其實(shí)是?種將?何圖元變?yōu)?維圖像的過(guò)程。該過(guò)程包含了兩部分的?作撒踪。第?部分?作:決定窗?坐標(biāo)中的哪些整型柵格區(qū)域被基本圖元占?;第?部分?作:分配?個(gè)顏?值和?個(gè)深度值到各個(gè)區(qū)域大渤。光柵化過(guò)程產(chǎn)?的是?元制妄。
  • 把物體的數(shù)學(xué)描述以及與物體相關(guān)的顏?信息轉(zhuǎn)換為屏幕上?于對(duì)應(yīng)位置的像素及?于填充像素的顏?,這個(gè)過(guò)程稱(chēng)為光柵化泵三,這是?個(gè)將模擬信號(hào)轉(zhuǎn)化為離散信號(hào)的過(guò)程耕捞。

紋理

  • 紋理可以理解為圖?. ?家在渲染圖形時(shí)需要在其編碼填充圖?,為了使得場(chǎng)景更加逼真.?這?使?的圖?,就是常說(shuō)的紋理.但是在OpenGL,我們更加習(xí)慣叫紋理,?不是圖?

混合

在測(cè)試階段之后,如果像素依然沒(méi)有被剔除烫幕,那么像素的顏?將會(huì)和幀緩沖區(qū)中顏?附著上的顏?進(jìn)?混合俺抽,混合的算法可以通過(guò)OpenGL的函數(shù)進(jìn)?指定。但是OpenGL提供的混合算法是有限的较曼,如果需要更加復(fù)雜的混合算法磷斧,?般可以通過(guò)像素著?器進(jìn)?實(shí)現(xiàn),當(dāng)然性能會(huì)?原?的混合算法差?些

矩陣

  • 變換矩陣
    例如圖形想發(fā)?平移,縮放,旋轉(zhuǎn)變換.就需要使?變換矩陣
  • 投影矩陣Projection
    ?于將3D坐標(biāo)轉(zhuǎn)換為?維屏幕坐標(biāo),實(shí)際線條也將在?維坐標(biāo)下進(jìn)?繪制

渲染上屏/交換緩沖區(qū)

  • 渲染緩沖區(qū)?般映射的是系統(tǒng)的資源?如窗?捷犹。如果將圖像直接渲染到窗?對(duì)應(yīng)的渲染緩沖區(qū)弛饭,則可以將圖像顯示到屏幕上
  • 但是,值得注意的是萍歉,如果每個(gè)窗?只有?個(gè)緩沖區(qū)侣颂,那么在繪制過(guò)程中屏幕進(jìn)?了刷新,窗?可能顯示出不完整的圖像
  • 為了解決這個(gè)問(wèn)題枪孩,常規(guī)的OpenGL程序?少都會(huì)有兩個(gè)緩沖區(qū)憔晒。顯示在屏幕上的稱(chēng)為屏幕緩沖區(qū),沒(méi)有顯示的稱(chēng)為離屏緩沖區(qū)蔑舞。在?個(gè)緩沖區(qū)渲染完成之后拒担,通過(guò)將屏幕緩沖區(qū)和離屏緩沖區(qū)交換,實(shí)現(xiàn)圖像在屏幕上的顯示斗幼。
  • 由于顯示器的刷新?般是逐?進(jìn)?的澎蛛,因此為了防?交換緩沖區(qū)的時(shí)候屏幕上下區(qū)域的圖像分屬于兩個(gè)不同的幀,因此交換?般會(huì)等待顯示器刷新完成的信號(hào)蜕窿,在顯示器兩次刷新的間隔中進(jìn)?交換谋逻,這個(gè)信號(hào)就被稱(chēng)為垂直同步信號(hào)呆馁,這個(gè)技術(shù)被稱(chēng)為垂直同步
  • 使?了雙緩沖區(qū)和垂直同步技術(shù)之后,由于總是要等待緩沖區(qū)交換之后再進(jìn)?下?幀的渲染毁兆,使得幀率?法完全達(dá)到硬件允許的最??平浙滤。為了解決這個(gè)問(wèn)題,引?了三緩沖區(qū)技術(shù)气堕,在等待垂直同步時(shí)纺腊,來(lái)回交替渲染兩個(gè)離屏的緩沖區(qū),?垂直同步發(fā)?時(shí)茎芭,屏幕緩沖區(qū)和最近渲染完成的離屏緩沖區(qū)交換揖膜,實(shí)現(xiàn)充分利?硬件性能的?的
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市梅桩,隨后出現(xiàn)的幾起案子壹粟,更是在濱河造成了極大的恐慌涡扼,老刑警劉巖碌补,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異焚鲜,居然都是意外死亡垦页,警方通過(guò)查閱死者的電腦和手機(jī)雀费,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)痊焊,“玉大人盏袄,你說(shuō)我怎么就攤上這事∷喂猓” “怎么了貌矿?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)罪佳。 經(jīng)常有香客問(wèn)我逛漫,道長(zhǎng),這世上最難降的妖魔是什么赘艳? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任酌毡,我火速辦了婚禮,結(jié)果婚禮上蕾管,老公的妹妹穿的比我還像新娘枷踏。我一直安慰自己,他們只是感情好掰曾,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布旭蠕。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪掏熬。 梳的紋絲不亂的頭發(fā)上佑稠,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音旗芬,去河邊找鬼舌胶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛疮丛,可吹牛的內(nèi)容都是我干的幔嫂。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼誊薄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼履恩!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起呢蔫,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤似袁,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后咐刨,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評(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,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡联予,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出材原,到底是詐尸還是另有隱情沸久,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布余蟹,位于F島的核電站卷胯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏威酒。R本人自食惡果不足惜窑睁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望葵孤。 院中可真熱鬧担钮,春花似錦、人聲如沸尤仍。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至苏遥,卻和暖如春饼拍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背暖眼。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工惕耕, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人诫肠。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓司澎,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親栋豫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子挤安,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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