android剛剛經曆了一個難以置信的增長周期,全世界的消費者手裡有超過7.5億台裝置,并且每天都有一百多萬台裝置被激活。和apple一樣,在每一台android手機和平闆上也有個集中的市場,稱為google play。随着這個市場被安裝到每台android裝置上,對任何一個夢想着釋出自己的遊戲或者桌面的人來說,這都是個前所未有的機會。
在android上,與apple的ios及許多其他移動平台一樣,開發者可以使用一個跨平台應用程式設計接口建立二維或者三維圖形,這個接口稱為opengl;opengl已經用于桌面系統很長時間了,但移動平台上使用的是一個特殊的嵌入式版本,叫做opengl es。第一個版本的opengl es把三維帶進了移動平台,它在開發者中非常流行,因為它非常簡單易學,同時還包含了一個定義好的特性集合。然而,這個特性集合也很有限,它無法跟上大多數高性能智能手機和平闆電腦所提供的先進的、卓越的特性。
發展到了opengl es 2.0,大多數舊的api被淘汰了,取而代之的是新的可程式設計api,它更容易增加特殊的效果,也能利用最新的硬體所提供的優勢。這些裝置現在也能生成其他競争平台幾年前就實作的圖形了!然而,為了利用這個能力,我們需要學習2.0引進的這些新的api。在2012年8月,khronos工作組最終确定了下一版本的規範,即opengl es 3.0,它完全相容2.0,隻是在其基礎上擴充了一些先進的特性。
是以,android上的opengl到底能做什麼呢?我們可以建立令人驚豔的動态桌面(live wallpaper),這些桌面可以被數百萬的使用者下載下傳;我們可以建立有競争力的三維遊戲,它們有着栩栩如生的、令人窒息的圖形效果。随着硬體成本的降低,以及線上商店的大量普及,是時候開始學習了!
本書的主要内容
快速浏覽一下我們将要讨論的内容:
在本書第一部分,會學習如何建立一個簡單的空氣曲棍球遊戲,包括觸控、紋理和基本原理。這個項目會教你如何成功地初始化opengl并将資料發送到螢幕上,以及如何使用基本的向量和矩陣數學建立三維世界。你也會學到android的許多特定細節,比如在dalvik虛拟機和本地環境之間編碼資料(marshal data)以及如何在主線程和渲染線程間安全地傳送資料。
在本書第二部分,你就可以在第一部分學習到的知識的基礎上開始搭建三維世界中的效果,比如光照和地形渲染,接下來還會學習如何建立可以運作在android主螢幕(home screen)上的動态桌面。
本書的讀者對象
如果對在android上開發更進階的圖形程式感興趣,本書就是為你所寫的。本書假定你有一些程式設計經驗,包括java和android的經驗。
<a href="https://yq.aliyun.com/articles/118010">第1章 準備開始</a>
<a href="https://yq.aliyun.com/articles/118014">1.1 安裝工具</a>
<a href="https://yq.aliyun.com/articles/118020">1.2 建立第一個程式</a>
<a href="https://yq.aliyun.com/articles/118027">1.3 初始化opengl</a>
<a href="https://yq.aliyun.com/articles/118033">1.4 建立renderer類</a>
<a href="https://yq.aliyun.com/articles/118037">1.5 使用靜态導入</a>
<a href="https://yq.aliyun.com/articles/118041">1.6 小結</a>
第一部分 一個簡單的空氣曲棍球遊戲
<a href="https://yq.aliyun.com/articles/118045">第2章 定義頂點和着色器</a>
<a href="https://yq.aliyun.com/articles/118050">2.1 為什麼選擇空氣曲棍球</a>
<a href="https://yq.aliyun.com/articles/118053">2.2 不要從頭開始</a>
<a href="https://yq.aliyun.com/articles/118060">2.3 定義空氣曲棍球桌子的結構</a>
<a href="https://yq.aliyun.com/articles/118064">2.4 使資料可以被opengl存取</a>
<a href="https://yq.aliyun.com/articles/118073">2.5 引入opengl管道</a>
<a href="https://yq.aliyun.com/articles/118076">2.6 opengl顔色模型</a>
<a href="https://yq.aliyun.com/articles/118098">2.7 小結</a>
<a href="https://yq.aliyun.com/articles/118104">第3章 編譯着色器及在螢幕上繪圖</a>
<a href="https://yq.aliyun.com/articles/118112">3.1 加載着色器</a>
<a href="https://yq.aliyun.com/articles/118123">3.2 編譯着色器</a>
<a href="https://yq.aliyun.com/articles/118135">3.3 把着色器一起連結進opengl的程式</a>
<a href="https://yq.aliyun.com/articles/118168">3.4 做最後的拼接</a>
<a href="https://yq.aliyun.com/articles/118189">3.5 在螢幕上繪制</a>
<a href="https://yq.aliyun.com/articles/118191">3.6 小結</a>
<a href="https://yq.aliyun.com/articles/118193">3.7 練習</a>
第4章 增加顔色和着色
4.1 平滑着色
4.2 引入三角形扇
4.3 增加一個新的顔色屬性
4.4 使用新的顔色屬性渲染
4.5 小結
4.6 練習
第5章 調整螢幕的寬高比
5.1 寬高比的問題
5.2 使用虛拟坐标空間
5.3 線性代數基礎
5.4 定義正交投影
5.5 加入正交投影
5.6 小結
5.7 練習