OpenGLES-理論準備

OpenGLES-理論準備

GitHub地址

https://github.com/softwarefaith/OpenGLES-Guide/tree/master

基礎(chǔ)概念

  • GPU

圖形處理單元,結(jié)合幾何,顏色,燈光和其他數(shù)據(jù)產(chǎn)生屏幕硬件組件

CPU與GPU區(qū)別

  • 渲染

用3D數(shù)據(jù)生成一個2D圖像的過程

  • 像素

一張圖片由矩形的顏色點組成,這些顏色點為像素弟头。

圖像由像素構(gòu)成,每個像素有紅,藍捆姜,綠 3個元素

OpenGL ES

什么是OpenGL-ES

OpenGL是一套應用程序編程接口(API),借助這個API我們開發(fā)人員就可以開發(fā)出對圖形硬件具有訪問的能力的程序迎膜。OpenGL ES是OpenGL的剪裁版本.

特性
  • 過程性

OpenGL不是面向?qū)ο蟮哪嗉迹設(shè)penGL無法利用面向?qū)ο蟮奶匦?/p>

  • 雙重實現(xiàn)

1軟件

OpenGL-software.png

2硬件

OpenGL-hardware.png
與硬件關(guān)系

部分運行在CPU,部分運行在GPU上磕仅,橫跨兩個處理器之間珊豹,協(xié)調(diào)兩個內(nèi)存區(qū)域的數(shù)據(jù)交換簸呈。

OpenGL的組成
  • 圖元函數(shù):指定要生成圖形或圖像的圖元。主要有兩種類型店茶,一種是繪制二維或三維的幾何圖元蜕便,如點,線贩幻,多邊形等轿腺;另一種是離散型的實體,例如:位圖丛楚。

  • 屬性函數(shù):屬性函數(shù)主要是控制圖元的外觀及樣式族壳,例如:對圖元的顏色、線型趣些、光照及紋理等效果處理仿荆。

  • 觀察函數(shù):觀察函數(shù)主要是對攝像機屬性的操作。我們可以操作攝像機顯示圖形或圖像近距或是遠距效果坏平。

  • 控制函數(shù):能夠讓我們啟用或禁用各種OpenGL的特性拢操。

  • 查詢函數(shù):可以讓我們查詢OpenGL狀態(tài)變量的值。

  • 輸入與窗口控制函數(shù):這個本身不屬于OpenGL舶替,但是由于我們會經(jīng)常在程序中輸入輸出或是窗口控制操作令境,所以,這些函數(shù)還是比較重要的坎穿。

在iOS中需要類庫:

iOS-OpenGL-FrameWork.png
開發(fā)約定

我們以后會見到OpenGL的函數(shù)多是以gl開頭展父,因為OpenGL的函數(shù)遵循一定的命名約定,它可以告訴我們這個函數(shù)來自哪個函數(shù)庫玲昧,并且還可以告訴我們這個函數(shù)的參數(shù)個數(shù)和類型栖茉。

OpenGL的函數(shù)是采用以下的書寫格式:

<函數(shù)庫前綴><根命令><可選的參數(shù)數(shù)量><可選的參數(shù)類型>

坐標系與變換

在開發(fā)OpenGL程序時,需要用到兩個坐標系孵延。一個稱為對象坐標系吕漂,另一個稱為世界坐標系。

第一個坐標系是我們在開發(fā)中使用的坐標系尘应;第二個坐標系又稱為窗口坐標系或屏幕坐標系惶凝,在這個坐標系中的單位是像素。

在繪制的過程中犬钢,OpenGL會自動實現(xiàn)從對象到窗口坐標系的轉(zhuǎn)換苍鲜,所需要的信息是屏幕中顯示窗口的尺寸和用戶希望顯示對象空間的大小。OpenGL中所需要的坐標系變換由兩個矩陣決定玷犹,即模型視圖矩陣和投影矩陣混滔,這些矩陣是OpenGL的狀態(tài)的一部分。設(shè)置這兩種矩陣的典型步驟包括以下三個步驟:

(1) 指定我們希望修改的矩陣。

(2) 將矩陣設(shè)為單位矩陣坯屿。

(3) 修改當前矩陣為用戶期望的矩陣油湖。
  </br>
  <code>
 glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluortho2D(-1.0,1.0,-1.0,1.0)
  </code>

狀態(tài)保存

OpenGL在內(nèi)部就是一個狀態(tài)機,函數(shù)調(diào)用會修改其內(nèi)部的狀態(tài)领跛,OpenGL的狀態(tài)決定了圖元的行為和繪制方式乏德。我們對圖元的屬性和其他狀態(tài)變量所進行的全部修改。在OpenGL中提供了兩種類型的堆棧吠昭,可將當前狀態(tài)保存在堆棧中喊括,以便以后使用。

矩陣堆椩踅耄可用于保存投影矩陣和模型視圖矩陣瘾晃。每種類型的堆棧只能用來容納相應類型的矩陣贷痪。所使用的矩陣由當前矩陣模式(GL_MODELVIEW或GL_PROJECTION)所決定的幻妓。可用函數(shù)glPushMatrix()和glPopMatrix()使矩陣入椊俾#或出棧肉津。

矩陣堆棧的主要作用:一是在構(gòu)建層次模型時,使用堆棧來遍歷這些層次模型的樹型數(shù)據(jù)結(jié)構(gòu)舱沧;二是在進行繪制時可以回到先前的視圖妹沙,而不需要我們重新計算繪制。

緩存

圖形處理器能夠控制和管理的連續(xù)RAM.目的是在兩個內(nèi)存區(qū)域間數(shù)據(jù)交換時熟吏,更加快速距糖。

OPenGL提供了以下七個步驟:

1.生成Generate:緩存標示符∏K拢【glGenBuffers()】

2.綁定(Bind):接下來的運算使用緩存悍引。【glBindBuffers()】

3.緩存數(shù)據(jù)(Buffer Data):為當前綁定的緩存分配并初始化足夠的連續(xù)內(nèi)存帽氓∪そ铮【glBufferData() / glBuferSubData()】

4.啟用(Enable)| 禁止(Disable): 是否使用緩存數(shù)據(jù)。 【glEnableVertexAttribArray()/glDisableVertexAttribArray()】

5.設(shè)置指針(set Pointers): 數(shù)據(jù)類型以及數(shù)據(jù)內(nèi)存偏移值黎休∨欤【glVertexAttribPointer()】

6.繪圖(Draw):使用綁定的緩存數(shù)據(jù)渲染場景∈迫【glDrawArrays()/glDrawElements()】

7.刪除(Delete):刪除以前生成的緩存并釋放相關(guān)資源.【glDeleteBuffers()】

幀緩存(FrameBuffer)

接收渲染結(jié)果的緩沖區(qū)叫幀緩存联贩。它不需要被初始化,因為他會在適當?shù)臅r候替換緩存的內(nèi)容捎拯。綁定時泪幌,隱式開啟。

屏幕顯示像素受到保存在前幀緩存的特定緩存中像素顏色元素控制,而程序和操作系統(tǒng)會把渲染結(jié)果保存到包括后幀緩存在內(nèi)的其他幀緩存座菠。

framebuffer.jpg

當渲染后的后幀緩存包含一個完成的圖像時狸眼,前幀緩存與后幀緩存幾乎會瞬間切換。后幀緩存會變成新的前幀緩存浴滴,同時舊的前幀緩存會變成后幀緩存拓萌。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市升略,隨后出現(xiàn)的幾起案子微王,更是在濱河造成了極大的恐慌,老刑警劉巖品嚣,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炕倘,死亡現(xiàn)場離奇詭異,居然都是意外死亡翰撑,警方通過查閱死者的電腦和手機罩旋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來眶诈,“玉大人涨醋,你說我怎么就攤上這事∈徘耍” “怎么了浴骂?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長宪潮。 經(jīng)常有香客問我溯警,道長,這世上最難降的妖魔是什么狡相? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任梯轻,我火速辦了婚禮,結(jié)果婚禮上谣光,老公的妹妹穿的比我還像新娘檩淋。我一直安慰自己,他們只是感情好萄金,可當我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布蟀悦。 她就那樣靜靜地躺著,像睡著了一般氧敢。 火紅的嫁衣襯著肌膚如雪日戈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天孙乖,我揣著相機與錄音浙炼,去河邊找鬼份氧。 笑死,一個胖子當著我的面吹牛弯屈,可吹牛的內(nèi)容都是我干的蜗帜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼资厉,長吁一口氣:“原來是場噩夢啊……” “哼厅缺!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起宴偿,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤湘捎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后窄刘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體窥妇,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年娩践,在試婚紗的時候發(fā)現(xiàn)自己被綠了活翩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡欺矫,死狀恐怖纱新,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情穆趴,我是刑警寧澤,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布遇汞,位于F島的核電站未妹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏空入。R本人自食惡果不足惜络它,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望歪赢。 院中可真熱鬧化戳,春花似錦、人聲如沸埋凯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽白对。三九已至掠廓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間甩恼,已是汗流浹背蟀瞧。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工沉颂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人悦污。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓铸屉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親切端。 傳聞我的和親對象是個殘疾皇子抬探,可洞房花燭夜當晚...
    茶點故事閱讀 44,974評論 2 355

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