閑話
今天是2016年的最后一天,陽光明媚,大家都放假我們卻在為人類的明天而奮斗(加班),哈。以前接觸一個新知識總想寫下來,但剛開始學的時候感覺理解不深,不好下手也擔心寫錯誤人子弟,后來學會后就發現已然沒有了寫下來的沖動了。最近項目上接觸到攝像頭圖像處理部分,由于android的限制,如不修改系統層,攝像頭圖像渲染是需要在界面上顯示然后才能獲取資源,而我們的項目是在后臺錄制,這顯然出現沖突了,當然每個人都有自己的實現方式,我機緣巧合的看到了OpenGL,開始并不了解,經過一段時間摸索略有理解,所以開了這個文集記錄,希望能把他走完。
如果你是來學技術的,那請跳過這一篇,因為這一篇不會有任何干貨。
什么是OpenGL ES
如果想看一大堆的名詞介紹請出門左轉,OpenGL ES(OpenGL for Embedded Systems)實際上就是OpenGL(Open Graphics Library)在移動端的閹割版。那么OpenGL又是什么?他是跨編程語言、跨平臺的編程接口或者叫圖形庫。
EGL又是什么
EGL實際上是OpenGL和設備(又或者叫操作系統)間的中間件,因為OpenGL是標準的,但設備是千奇百怪的,要對接就需要一個中間件做協調。也就是說一個設備要支持OpenGL,那么它需要開發一套相對應的EGL來對接。EGL主要負責初始化OpenGL的運行環境和設備間的交互,簡單的說就是OpenGL負責繪圖EGL負責和設備交互。
三角關系的糾葛
還需要知道什么
-
坐標系
作為一個程序猿你應該能理解,程序的世界就是對關心的事務各種抽象和量化,不關心的事務通通排除在外(所以不要試圖和程序猿談感情,如果他不能量化這感情有多少,那么他就會認為這個是一個BUG,哈哈)。那么在這里的世界就是一個坐標系,一個只有X、Y和Z三個緯度的世界,其它的東西都需要你自己來建設,你能用到的原材料就只有點、線和面(三角形),當然萬能的主還是會施舍點陽光(光照)和顏色(材質)給你的。
這就是你的世界 -
線性代數
上學的時候我一直在想,線性代數干啥用?一個矩陣乘一個矩陣得到一個新的矩陣意義在哪里?單元矩陣、轉置、投影、拉普拉斯變換、高斯變換等等,這些名詞是否曾經在你腦海里一笑而過,然而你并不知道它們有什么卵用。實際上這都是根據世界上的事務和行為做抽象的依據,當然你不懂這些數學模型并不影響你在這個世界大展身手,但你要是懂的話,你在做一件事的時候你可能會有一種恍然大悟的愉悅。 -
“相機”
這里的“相機”和現實世界中的相機不是一個東西,但概念的相同的,都是捕獲世界的景像呈現到二維平面上。這里的“相機”就是捕獲這個三維世界的圖像呈現到設備(屏幕)上的。
如下圖:我們的世界中有一只茶壺,我們如何呈現?我們在世界中架設一個“相機”如左圖,通過相機捕獲到右圖的圖像,這樣我們就能將這個世界展現到設備上了。同時我們可以調整“相機”的位置角度遠近來觀察這個世界。
結束語
作為一個教程或者解說型文章,我覺得圖是相當重要的,但作圖是相當麻煩的,后續得閑再寫的時候盡量多的插圖。
本人菜鳥如有錯誤你特么來打我啊,哈!
在2016年的最后一天祝愿大家在新的一年里代碼永無BUG。