咸魚(yú)發(fā)夢(mèng) | 第三回 OpenGL

咸魚(yú)好想擺爛....

????????假設(shè)現(xiàn)在要畫(huà)一幅畫(huà),畫(huà)布已經(jīng)準(zhǔn)備好了,現(xiàn)在了解一下畫(huà)筆吧。就是OpenGL。
????????OpenGL,就是圖形API。就嗯...哈哈哈哈。
????????系統(tǒng)一般是通過(guò)顯卡把數(shù)據(jù)變成圖像顯示到顯示器上面去的。我現(xiàn)在有一個(gè)飛機(jī)模型(就是一堆數(shù)據(jù)),我需要通過(guò)顯卡,把它顯示到顯示器上面。就需要跟顯卡溝通,讓她幫我完成任務(wù)。怎么溝通?用接口...就是API..因?yàn)槎际歉鷪D形有關(guān)的,所以叫圖形API...呃...
????????圖形API 也有好多種,比較主流的據(jù)說(shuō)是DirectX、OpenGL、Metal。DirectX需要運(yùn)行在windows平臺(tái),Metal是蘋(píng)果的,而OpenGL是跨平臺(tái)的,就是不依賴于平臺(tái)的。一般移動(dòng)設(shè)備上的是OpenGL ES,就是精簡(jiǎn)版的OpenGL。
????????以前我覺(jué)得游戲引擎好厲害,可以處理那么復(fù)雜的圖形,后來(lái)發(fā)現(xiàn)原來(lái)厲害的不是引擎,是圖形API。但最后,我發(fā)現(xiàn)顯卡才是真正的王者。因?yàn)閳D形API,只是接口,定義好的接口。真正實(shí)現(xiàn)這個(gè)接口的是顯卡。圖形API 就像是大家訂好了一套協(xié)議,以后都按照協(xié)議上說(shuō)明的去溝通。我通過(guò)API告訴了顯卡,我有這些數(shù)據(jù),你幫我畫(huà)一個(gè)飛機(jī)。顯卡就通過(guò)這樣那樣的方法幫你畫(huà)出來(lái)顯示到顯示器上了。你問(wèn)顯卡到底用了什么方法,顯卡說(shuō),你別管,給你看到飛機(jī)就行。不同的顯卡有自己的實(shí)現(xiàn)方式。
????????這個(gè)流程,看起來(lái)沒(méi)什么毛病。咸魚(yú)覺(jué)得自己可以開(kāi)始了。然后咸魚(yú)懵逼了。因?yàn)椴恢涝趺撮_(kāi)始...
????????圖形API 只是一套協(xié)議。她不是庫(kù)。也就是說(shuō)不是去哪里下載一個(gè)庫(kù)下來(lái)用就行(其實(shí)也是下一個(gè)庫(kù)來(lái)用...)。調(diào)用 API 什么概念,是調(diào)用實(shí)現(xiàn)好了的 API。那畫(huà)圖的API實(shí)現(xiàn)在哪里,在顯卡上,更準(zhǔn)確的說(shuō),在顯卡的一個(gè)地址上面。但誰(shuí)特么知道那個(gè)地址在哪里...不同的顯卡,地址也不一樣。你想要畫(huà)圖,顯卡也按照約定提供好了畫(huà)圖的方法,現(xiàn)在問(wèn)題是你要找到那個(gè)畫(huà)圖方法的位置。是不是很懵逼?沒(méi)關(guān)系,偉大的前輩們又幫我們做好了這些事嗚嗚嗚嗚,這個(gè)世界怎么這么多好人!前輩們提供了一個(gè)庫(kù),你只要像圖形API 約定好的那樣,調(diào)用方法,無(wú)論你用什么系統(tǒng)、什么顯卡他都會(huì)幫你找到那個(gè)命中注定的地址,讓顯卡為你工作!
????????當(dāng)然以上的前提是你用的這個(gè)顯卡是真的實(shí)現(xiàn)了這些API...目前大多都是支持OpenGL的。不過(guò)OpenGL經(jīng)過(guò)這么多年的成長(zhǎng),也有好幾個(gè)版本,還需要確認(rèn)好顯卡是否支持對(duì)應(yīng)的版本。
????????好人前輩們提供了好幾個(gè)這樣功能的庫(kù),可以搜索 OpenGL三方庫(kù) 自行選擇。這些三方庫(kù)哪里下載、如何使用,也有前輩寫(xiě)好了教程??梢运阉?LearnOpenGL CN 學(xué)習(xí)。是非常棒的入門(mén)教程。
????? ? 入門(mén)教程學(xué)習(xí)完之后可以飛啦咸魚(yú)噠嘰??!
????????咸魚(yú)選擇學(xué)習(xí)的是 OpenGL,咸魚(yú)沒(méi)有Mac,還想做的登西跑android,所以其實(shí)沒(méi)得選。三方庫(kù)選擇的是 GLAD,他可以根據(jù)你選擇的OpenGL版本導(dǎo)出對(duì)應(yīng)版本的庫(kù)。感覺(jué)很方便,可以治好強(qiáng)迫癥。目前咸魚(yú)學(xué)習(xí)的OpenGL 版本是 Core 3.3。
????????

雖然顯卡在咸魚(yú)心里是王者,但是誰(shuí)又能說(shuō)誰(shuí)不重要呢~大家都在自己的位置上發(fā)光發(fā)熱,缺一不可哦。就是這些共同的協(xié)作碰撞出來(lái)這么多賽博火花吧~
咸魚(yú)也會(huì)好好躺著曬太陽(yáng),在自己的位置上好好擺爛的!