OpenGL 常見的專業(yè)名詞解讀

1 圖像API簡介?

OpenGL (Open Graphics Library) 是一個(gè)跨平臺(tái)威蕉、跨編程語言的編程圖形程序接口的诵,他講計(jì)算機(jī)的資源抽象為一個(gè)個(gè)OpenGL的對(duì)象莫绣,對(duì)這些資源的操作抽象為一個(gè)個(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è)多媒體處理框架峦树,并不支持Windows以外的平臺(tái),所以不是跨平臺(tái)框架簿废,按照性質(zhì)分類空入,可以分為四大部分:顯示部分、聲音部分族檬、輸入部分和網(wǎng)路部分

Metal: Apple為游戲開發(fā)者推出了新的平臺(tái)技術(shù)Metal歪赢,該技術(shù)能為3D圖像提高10倍的渲染性能,Metal是Apple為了解決3D渲染而推出的框架单料。

2 OpenGL專業(yè)名詞解析

OpenGL狀態(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)白对。或者說换怖,狀態(tài)機(jī)是一種行為甩恼,說明對(duì)象在其生命周期中響應(yīng)事件所經(jīng)歷的狀態(tài)序列以及對(duì)那些狀態(tài)事件的響應(yīng)。

記憶功能沉颂,能記錄當(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í)候钉蒲,不在接收輸入,停止工作

OpenGL 上下文

在應(yīng)用程序調(diào)用任何OpenGL指令之前彻坛,需要首先創(chuàng)建一個(gè)openGL的上下文顷啼。這個(gè)上下文是個(gè)非常龐大的狀態(tài)機(jī)踏枣,保存了OpenGL中的各種狀態(tài),是OpenGL指令執(zhí)行的基礎(chǔ)

OpenGL的函數(shù)是類似C語音的面向過程的函數(shù)钙蒙,本質(zhì)都是對(duì)OpenGL上下文這個(gè)狀態(tài)機(jī)的某個(gè)狀態(tài)或者對(duì)象進(jìn)行操作茵瀑,前提是要把這個(gè)對(duì)象設(shè)置為當(dāng)前對(duì)象。

在應(yīng)用程序中仪搔,創(chuàng)建多個(gè)不同的上下文瘾婿,在不同線程中使用不同的上下文蜻牢,上下文直接共享紋理烤咧、緩沖區(qū)等資源。

渲染

將圖形/圖像數(shù)據(jù)轉(zhuǎn)換成3D空間圖像的操作? (將圖像顯示繪制到屏幕上的過程? 解碼圖片->渲染)

頂點(diǎn)數(shù)組和頂點(diǎn)緩沖區(qū)

頂點(diǎn)數(shù)據(jù)就是圖像顯示在屏幕某個(gè)位置的信息抢呆。OpenGL中的圖像是有圖元組成煮嫌。在OpenGL ES中,有三種圖元:點(diǎn)抱虐、線昌阿、三角形。在調(diào)用繪制方法的時(shí)候恳邀,直接由內(nèi)存?zhèn)魅腠旤c(diǎn)數(shù)據(jù)懦冰,也就是說這部分?jǐn)?shù)據(jù)之前是存儲(chǔ)在內(nèi)存當(dāng)中的,被稱為頂點(diǎn)數(shù)組谣沸。

而性能更高的做法是刷钢,提前分配一塊顯存,將頂點(diǎn)數(shù)據(jù)預(yù)先傳到顯存當(dāng)中乳附,這部分顯存就被稱為頂點(diǎn)緩存去内地。

頂點(diǎn)指的是我們?cè)诶L制一個(gè)圖形時(shí),它的頂點(diǎn)位置數(shù)據(jù)赋除。而這個(gè)數(shù)據(jù)可以直接存儲(chǔ)在數(shù)組中或者蔣祺緩存到GPU內(nèi)存中阱缓。

頂點(diǎn)數(shù)組? -- 頂點(diǎn)數(shù)據(jù)存儲(chǔ)到內(nèi)存中

頂點(diǎn)緩沖區(qū) -- 訂單數(shù)據(jù)存儲(chǔ)到GPU顯存中

管線

在OpenGL下渲染圖形,會(huì)經(jīng)歷一個(gè)一個(gè)的節(jié)點(diǎn)举农,這樣的操作就可以理解管線荆针。顯卡在處理數(shù)據(jù)的時(shí)候,是按照一定的順序來的颁糟,而且嚴(yán)格按照這個(gè)順序執(zhí)行航背。就像誰從一根管子的一端流到另一端,順序不能被打破

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

在早期的OpenGL版本滚停,封裝了很多種著色器程序塊沃粗,內(nèi)置的一段包含了光照、坐標(biāo)變換键畴、剪裁等諸多功能的固定shader程序完成最盅,來幫助開發(fā)者完成圖形渲染突雪。而開發(fā)者只需要傳入響應(yīng)的參數(shù),就能快速完成圖形的渲染涡贱。類似于iOS會(huì)封裝很多API咏删,我們只需要調(diào)用就能實(shí)現(xiàn)功能,不需要關(guān)注底層實(shí)現(xiàn)原理问词。

但是由于OpenGL使用的場景非常豐富督函,固定管線或存儲(chǔ)著色器無法完成每一個(gè)業(yè)務(wù)。這是將相關(guān)部分開放為可編程

著??程序Shader?

將固定渲染管線架構(gòu)變成可編程渲染管線激挪。因此辰狡,OpenGL在實(shí)際調(diào)用繪制函數(shù)之前,還需要指定一個(gè)由shander編譯成的著色器程序垄分。

常見的著色器:

? ? 頂點(diǎn)著色器 VertexShader

? ? 片元著色器/像素著色器 FragmentShader

? ? 幾何著色器 GeometryShader

? ? 曲面細(xì)分著色器 TessellationShader

OpenGL在處理shader時(shí)宛篇,和其他編譯器一樣,通過編譯薄湿、鏈接等步驟叫倍,生產(chǎn)著色器程序(glProgram),著色器程序同時(shí)包含了頂點(diǎn)著色器和片元著色器的運(yùn)算邏輯豺瘤。在OpenGL進(jìn)行繪制的時(shí)候吆倦,首先由頂點(diǎn)著色器對(duì)傳入的頂點(diǎn)數(shù)據(jù)進(jìn)行運(yùn)算;在通過圖元裝配坐求,將頂點(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

頂點(diǎn)著色器是OpenGL中用于計(jì)算頂點(diǎn)屬性的程序璧南。

一般用來處理圖形每個(gè)頂點(diǎn)變換[旋轉(zhuǎn)/平移/投影]

頂點(diǎn)著色器是逐頂點(diǎn)運(yùn)算的程序,也就是說每個(gè)頂點(diǎn)數(shù)據(jù)都會(huì)執(zhí)行一次頂點(diǎn)著色器师逸,當(dāng)然這是并行的司倚,并且頂點(diǎn)著色器運(yùn)算過程中無法方位其他頂點(diǎn)的數(shù)據(jù)

一般來說典型的需要計(jì)算的訂單屬性主要包括頂點(diǎn)坐標(biāo)變換、逐頂點(diǎn)光照運(yùn)算等等篓像。頂點(diǎn)坐標(biāo)由自身坐標(biāo)系轉(zhuǎn)換到歸一化坐標(biāo)系的運(yùn)算动知,就是在這里發(fā)生的。

片元著色器 FragmentShader

片元著色器是OpenGL中用于計(jì)算片元(像素)顏色的程序员辩。

一般用來處理圖形中每個(gè)像素點(diǎn)顏色的計(jì)算和填充

片元著色器是逐像素運(yùn)算的程序盒粮,也就是說每個(gè)像素都會(huì)執(zhí)行一次片元著色器,當(dāng)然也是并行的奠滑。

GLSL(OpenGL Shading Language)

OpenGL著色語音(OpenGL Shading Language)是用來在OpenGL中著色編程的語音丹皱,即開發(fā)人員寫的短小的自定義程序妒穴,他們是在圖形卡的GPU(Graphic Processor Unit圖形處理理單元)上執(zhí)行的,代替了固定的渲染管線的一部分摊崭,使渲染管線中的不同層次具有可編程性讼油。比如視圖轉(zhuǎn)換、投影轉(zhuǎn)換等呢簸。GLSL的著色器代碼分為兩個(gè)部分:VertexShader頂點(diǎn)著色器和FragmentShader 片元著色器

光柵化 Rasterization

光柵化就是把頂點(diǎn)數(shù)據(jù)轉(zhuǎn)換為片元的過程矮台。片元中的每一個(gè)院隊(duì)對(duì)應(yīng)幀緩沖區(qū)中的一個(gè)像素。

光柵化包含了兩部分工作

1 決定窗口坐標(biāo)中的哪些整形柵格區(qū)域被基本圖元占用

2 分配一個(gè)顏色值和一個(gè)深度值到各個(gè)區(qū)域根时。

紋理

紋理可以理解為圖片瘦赫。大家在渲染圖形時(shí)需要在其編碼填充圖片,這里使用的圖片就是紋理啸箫。在OpenGL我們更習(xí)慣叫紋理耸彪,而不是圖片伞芹。

混合(Blending)

在測試階段之后忘苛,如果像素依舊沒有被剔除,那么像素的顏色將會(huì)和幀緩存區(qū)中的顏色附著上的顏色進(jìn)行混合唱较,混合的算法可以通過OpenGL的函數(shù)進(jìn)行指定扎唾。 但是OpenGL提供的混合算法是有限的,如果需要更加復(fù)雜的混合算法南缓,一般可以通過像素著色器進(jìn)行實(shí)現(xiàn)胸遇,當(dāng)然性能會(huì)比原生的混合算法差一些。

變換矩陣 Transformation

圖形想發(fā)生平移汉形、縮放纸镊、旋轉(zhuǎn)變換,就需要使用變換矩陣

投影矩陣 Projection

用于將3D坐標(biāo)轉(zhuǎn)換為二維屏幕坐標(biāo)概疆,實(shí)際線條也將在二維坐標(biāo)下進(jìn)行繪制

投影方式 正投影&透視投影

正投影(平行投影):圖片繪制不管遠(yuǎn)近逗威,1:1進(jìn)行繪制, 顯示2D圖形

透視投影:遠(yuǎn)小近大效果? 顯示3D圖形

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末岔冀,一起剝皮案震驚了整個(gè)濱河市凯旭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌使套,老刑警劉巖罐呼,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異侦高,居然都是意外死亡嫉柴,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桑驱,“玉大人,你說我怎么就攤上這事仿畸∥D颍” “怎么了呐萌?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長谊娇。 經(jīng)常有香客問我肺孤,道長,這世上最難降的妖魔是什么济欢? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任赠堵,我火速辦了婚禮,結(jié)果婚禮上法褥,老公的妹妹穿的比我還像新娘茫叭。我一直安慰自己,他們只是感情好半等,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布揍愁。 她就那樣靜靜地躺著,像睡著了一般杀饵。 火紅的嫁衣襯著肌膚如雪莽囤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天切距,我揣著相機(jī)與錄音朽缎,去河邊找鬼。 笑死谜悟,一個(gè)胖子當(dāng)著我的面吹牛话肖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播葡幸,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼最筒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了礼患?” 一聲冷哼從身側(cè)響起是钥,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缅叠,沒想到半個(gè)月后悄泥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肤粱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年弹囚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片领曼。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鸥鹉,死狀恐怖蛮穿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情毁渗,我是刑警寧澤践磅,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站灸异,受9級(jí)特大地震影響府适,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜肺樟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一檐春、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧么伯,春花似錦疟暖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至凯楔,卻和暖如春窜骄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背摆屯。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留糠亩,地道東北人虐骑。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像赎线,于是被迫代替她去往敵國和親廷没。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351