2.關(guān)于OpenGL 坐標(biāo)系以及渲染流程

?上一章我們了解了一些OpenGL相關(guān)的名詞,現(xiàn)在我們開始了解一下與之相關(guān)的坐標(biāo)系,把一個(gè)圖片成像在手機(jī)屏幕當(dāng)然需要有對(duì)應(yīng)的位置啦,所以還是必須要了解滴!

? ? 1.?2D笛卡爾坐標(biāo)系

圖片出自邏輯教育

這個(gè)我們都知道啦,就是我們平時(shí)用的二維坐標(biāo)系

2. 3D笛卡爾坐標(biāo)系

圖片出自邏輯教育

普通的三維坐標(biāo)系

3.視口


圖片出自邏輯教育

所謂視口就是我們用戶在屏幕上所能看到的范圍

4.OpenGL投影方式


圖片出自邏輯教育

5.OpenGL攝像機(jī)坐標(biāo)系

圖片出自邏輯教育

通過(guò)上圖我們不難看出,所謂相機(jī)坐標(biāo)系就是觀察的物體以相機(jī)為參考點(diǎn)所在的三維坐標(biāo)

那么OpenGL是怎么通過(guò)坐標(biāo)轉(zhuǎn)換最終定位到我們屏幕顯示位置的呢,大致流程如下:


圖片出自邏輯教育



圖片的渲染流程


圖片出自邏輯教育

大致流程如上圖所示,那么cpu 和 gpu都具體做了什么事情呢?我們就從iOS系統(tǒng)下加載一張圖片說(shuō)起

1.假設(shè)我們使用?????????????+imageWithContentsOfFile:????????????????????????????? ??????????????????????????從此盤中加載一張圖片,這個(gè)時(shí)候這張圖片是png或者jpg格式的圖片,就是說(shuō)這張圖片經(jīng)過(guò)了壓縮

2.然后我們 imgView.image = image 給到imgView

3.接著會(huì)有???????????????CATransaction 來(lái)捕捉到?????????UIImageView?????????????圖層樹的變化

4.在主線程里的下一個(gè)RunLoop到來(lái)之時(shí),Core Animation會(huì)提交這個(gè)隱式的transaction

在這里我們思考一個(gè)問(wèn)題,就是經(jīng)過(guò)壓縮后的圖片能直接使用取渲染到屏幕上嗎?

答案是否定的,只有位圖才能通過(guò)GPU渲染!那應(yīng)該怎么辦呢? 這個(gè)時(shí)候就到了我們的CPU發(fā)揮功效的時(shí)候了!

1.首先CPU會(huì)針對(duì)壓縮的圖片進(jìn)行解壓縮,把它還原成位圖形式(這張圖就是我們所說(shuō)的紋理),這是一個(gè)非常耗時(shí)的CPU操作

2.CPU會(huì)計(jì)算出當(dāng)前圖片的Frame

3.將解壓縮之后的圖片提交給GPU來(lái)做圖片渲染

4.GPU拿到圖片以后會(huì)獲取??????圖片F(xiàn)rame,并且將坐標(biāo)提交給頂點(diǎn)著色器進(jìn)行頂點(diǎn)坐標(biāo)計(jì)算

5.光柵化(將頂點(diǎn)轉(zhuǎn)化為片元,??????????????????????????獲取圖片對(duì)應(yīng)屏幕的像素點(diǎn))

6.片元著色器確定每個(gè)像素點(diǎn)的顏色值

7.渲染到屏幕

上面我們提到了解壓縮是一個(gè)非常耗時(shí)的操作,并且他默認(rèn)實(shí)在主線程執(zhí)行的,那么當(dāng)需要加載大量的圖片的時(shí)候,相對(duì)應(yīng)的CPU工作量就會(huì)很大,從而可能會(huì)導(dǎo)致阻塞主線程

在這里我們說(shuō)一下解壓縮原理

解壓縮的原理其實(shí)很簡(jiǎn)單,其實(shí)就是對(duì)圖片進(jìn)行重新繪制,得到一張新的解壓縮后的圖片,如果已經(jīng)解壓縮過(guò)的圖片系統(tǒng)講不會(huì)再解壓縮.其中解壓縮用的最核心的函數(shù)就是???????????????????????????CGBitmapContextCreate???()


解壓縮代碼

參數(shù)解釋:

data:指定一塊內(nèi)存,如果為空就會(huì)由系統(tǒng)自己分配,所以一半為NULL

width???和height:圖片的大小->對(duì)應(yīng)像素

bitsPerComponent:?像素的每個(gè)顏色分量使用的bit???數(shù),在RGB空間下一般為8

bytesPerRow:NULL

space:就是我們的顏色空間,一般為RGB

bitmapInfo:kCGImageAlphaPremultipliedFirst

如果我們看過(guò)YYImage\SDWebImage開源框架的話也會(huì)從中找到對(duì)應(yīng)的,他們是提前對(duì)圖片進(jìn)行解壓縮,下面是我截取的SDWebImage部分代碼

最后編輯于
?著作權(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)店門构挤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)髓介,“玉大人,你說(shuō)我怎么就攤上這事筋现√拼。” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵矾飞,是天一觀的道長(zhǎng)一膨。 經(jīng)常有香客問(wèn)我,道長(zhǎng)洒沦,這世上最難降的妖魔是什么豹绪? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮申眼,結(jié)果婚禮上瞒津,老公的妹妹穿的比我還像新娘。我一直安慰自己括尸,他們只是感情好巷蚪,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著濒翻,像睡著了一般屁柏。 火紅的嫁衣襯著肌膚如雪啦膜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天前联,我揣著相機(jī)與錄音功戚,去河邊找鬼。 笑死似嗤,一個(gè)胖子當(dāng)著我的面吹牛啸臀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播烁落,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼乘粒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了伤塌?” 一聲冷哼從身側(cè)響起灯萍,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎每聪,沒想到半個(gè)月后旦棉,有當(dāng)?shù)厝嗽跇淞掷锇l(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
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望亡资。 院中可真熱鬧,春花似錦向叉、人聲如沸锥腻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)瘦黑。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間幸斥,已是汗流浹背匹摇。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(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)容

  • 本文首發(fā)于個(gè)人博客:Lam's Blog - 【OpenGL ES】入門及繪制一個(gè)三角形画侣,文章由MarkDown語(yǔ)...
    格子林ll閱讀 7,252評(píng)論 2 18
  • 一冰悠、 OpenGL簡(jiǎn)介 OpenGL(Open Graphics Library)是一個(gè)跨編程語(yǔ)言、跨平臺(tái)的編程圖...
    MirL閱讀 1,045評(píng)論 0 2
  • 摘自:Cocos2d-x 高級(jí)開發(fā)教程-第10章OpenGL基礎(chǔ) OpenGL簡(jiǎn)介(1) OpenGL是一個(gè)基于C...
    資深小夏閱讀 1,598評(píng)論 0 0
  • 卷首語(yǔ) 歡迎來(lái)到 objc.io 的第三期配乱! 這一期都是關(guān)于視圖層的溉卓。當(dāng)然視圖層有很多方面,我們需要把它們縮小到幾...
    評(píng)評(píng)分分閱讀 1,757評(píng)論 0 18
  • 日子就這樣過(guò)著搬泥,妃嬪們?nèi)杖斩紒?lái)請(qǐng)安桑寨。 新人都續(xù)續(xù)侍了寢,升了位分佑钾。寧氏和甘氏無(wú)疑是最得寵的西疤。 老人們的失寵是意料之...
    君清兮閱讀 108評(píng)論 0 0