內容簡介
《OpenGL ES 2.0遊戲開發(上卷):基礎技術和典型案例》共分為17章,內容按照必知必會的基礎知識、基於OpenGL ES 2.0實現基本特效以及真實大型遊戲案例的順序進行詳細地講解。主要內容如下:OpenGL的渲染管線、著色語言(Shading Language)、投影及各種變換、OpenGL ES 2.0中光照的基本原理與實現、紋理映射的基本原理與使用、各種3D基本形狀的原理與實現、3D模型載入、混合及霧的基本原理與使用、3D開發技巧(包括標誌版、灰度圖地形、粒子沉積地形、天空盒與天空穹、鏡像技術、動態文本輸出以及非真實感繪製等一些常用的3D開發技巧)、剪裁與測試、Android中各種感測器的使用,以及NDK及iOS平台下的OpenGL ES開發,同時還介紹了如何在不同的平台間進行3D套用的移植;WebGL 3D套用開發,如何將3D套用移植到WebGL平台。最後用兩大完整案例夜鷹行動和BN賽艇貫穿整本書的實戰知識,真正幫助讀者學以致用。
《OpenGL ES 2.0遊戲開發(上卷):基礎技術和典型案例》中在給出實際的開發案例時涉及了Android SDK、Android NDK、iOS、WebGL等主流平台,書中關於可程式渲染管線著色器的知識與技術還可以通用於包括Windows Phone、MeeGO、PSP、PlayStation等移動嵌入式平台。
《OpenGL ES 2.0遊戲開發(上卷):基礎技術和典型案例》適合初學者、移動開發者、遊戲開發者、程式設計師學習,也適合大中專院校的相關專業的師生用書和培訓學校的教材。
圖書目錄
第1章 初識廬山真面目——Android概覽 1
1.1 智慧型手機市場現狀 1
1.1.1 5大智慧型手機作業系統 1
1.1.2 智慧型手機市場的新星 1
1.2 Android平台的特點及未來的趨勢 2
1.2.1 全新理念帶來的體驗風暴 2
1.2.2 中國手機市場的主導性作用 2
1.2.3 手機3D遊戲和套用增長迅速 3
1.3 如何搭建Android開發環境 3
1.3.1 JDK的安裝及環境配置 3
1.3.2 Eclipse集成開發環境的搭建 5
1.3.3 創建並啟動模擬器 6
1.4 Hello Android應用程式的開發 9
1.4.1 第一個Android應用程式 9
1.4.2 Android應用程式的項目結構 12
1.4.3 Android應用程式的調試 13
1.4.4 實際設備的在線上調試 15
1.5 已有Android項目的導入和運行 15
1.5.1 項目的導入 15
1.5.2 應用程式的運行 16
1.6 Android應用程式運行的機制 16
1.6.1 應用程式的系統架構 17
1.6.2 應用程式框架 17
1.6.3 Android運行時 18
1.6.4 系統庫 18
1.6.5 底層Linux核心 19
1.7 本章小結 19
第2章 遊戲開發相關Android知識——音效、存儲、藍牙等 20
2.1 遊戲中的音效 20
2.1.1 遊戲中的即時音效 20
2.1.2 即時音效的一個案例 21
2.1.3 背景音樂播放技術 23
2.1.4 簡易音樂播放器的實現 25
2.2 簡單數據的存儲——Preferences 28
2.2.1 Preferences簡介 28
2.2.2 Preferences實現訪問時間的記錄 28
2.3 手機自帶資料庫——SQLite 29
2.3.1 初識SQLite 29
2.3.2 SQLite資料庫的基本操作 30
2.3.3 SQLite資料庫的簡單案例 31
2.3.4 使用ContentProvider組件共享數據 34
2.3.5 使用ContentResolver獲取分享數據 35
2.4 檔案I/O 37
2.4.1 訪問SD卡中的檔案 37
2.4.2 訪問手機中的資料夾 38
2.4.3 讀取assets資料夾下的內容 40
2.5 2D動畫的開發 41
2.5.1 SurfaceView用法簡介 42
2.5.2 使用SurfaceView實現2D動畫 42
2.6 Socket網路通信 47
2.6.1 Socket開發基本知識 47
2.6.2 伺服器端 47
2.6.3 客戶端 48
2.7 藍牙通信 49
2.7.1 藍牙通信的基本知識 49
2.7.2 聊天案例概覽 50
2.7.3 聊天案例的開發過程 51
2.8 本章小結 62
第3章 初識OpenGL ES 2.0 63
3.1 OpenGL ES 2.0概述 63
3.1.1 OpenGL ES 2.0簡介 63
3.1.2 初識OpenGL ES 2.0應用程式 66
3.2 著色器與渲染管線 74
3.2.1 OpenGL ES 1.x的渲染管線 74
3.2.2 OpenGL ES 2.0的渲染管線 78
3.2.3 OpenGL ES中立體物體的構建 81
3.3 主流Android手機GPU大比拼 82
3.3.1 手機GPU四大家族對比 82
3.3.2 主流GPU的性能參數比較 86
3.4 本章小結 87
第4章 著色語言 88
4.1 著色語言(Shading Language)概述 88
4.2 著色語言基礎 88
4.2.1 數據類型概述 89
4.2.2 數據類型的基本使用 93
4.2.3 運算符 94
4.2.4 類型轉換 96
4.2.5 限定符 97
4.2.6 流程控制 100
4.2.7 函式的聲明與使用 102
4.2.8 片元著色器中浮點變數精度的指定 103
4.2.9 程式的基本結構 103
4.3 特殊的內建變數 104
4.3.1 頂點著色器中的內建變數 104
4.3.2 片元著色器中的內建變數 104
4.4 著色語言的內置函式 105
4.4.1 角度轉換與三角函式 106
4.4.2 指數函式 106
4.4.3 常見函式 107
4.4.4 幾何函式 110
4.4.5 矩陣函式 111
4.4.6 向量關係函式 112
4.4.7 紋理採樣函式 112
4.4.8 微分函式 113
4.5 用invariant修飾符避免值變問題 114
4.6 本章小結 115
第5章 必知必會的3D開發知識——投影及各種變換 116
5.1 攝像機的設定 116
5.2 兩種投影方式 117
5.2.1 正交投影 117
5.2.2 透視投影 123
5.3 各種變換 126
5.3.1 基本變換的相關數學知識 126
5.3.2 平移變換 126
5.3.3 旋轉變換 129
5.3.4 縮放變換 130
5.3.5 基本變換的實質 131
5.4 所有變換的完整流程 132
5.5 繪製方式 135
5.5.1 各種繪製方式概覽 135
5.5.2 點與線段繪製方式 137
5.5.3 三角形條帶與扇面繪製方式 138
5.5.4 頂點法與索引法 142
5.6 設定合理的視角 144
5.7 卷繞和背面剪裁 149
5.7.1 基本知識 149
5.7.2 一個簡單的案例 150
5.8 本章小結 152
第6章 讓場景更逼真——光照效果 153
6.1 曲面物體的構建 153
6.1.1 球體構建的基本原理 153
6.1.2 案例效果概覽 154
6.1.3 開發步驟 154
6.2 基本光照效果 157
6.2.1 光照的基本模型 157
6.2.2 環境光 158
6.2.3 散射光 159
6.2.4 鏡面光 163
6.2.5 三種光照通道的合成 167
6.3 定位光與定向光 168
6.4 點法向量和面法向量 171
6.5 光照的每頂點計算與每片元計算 173
6.6 本章小結 175
第7章 更加酷炫的3D效果——紋理映射 176
7.1 初識紋理映射 176
7.1.1 基本原理 176
7.1.2 紋理映射的簡單案例 177
7.2 紋理拉伸 182
7.2.1 兩種拉伸方式概覽 182
7.2.2 不同拉伸方式的案例 183
7.3 紋理採樣 186
7.3.1 紋理採樣概述 186
7.3.2 最近點採樣 186
7.3.3 線性紋理採樣 187
7.3.4 MIN與MAG採樣 189
7.3.5 不同紋理採樣方式的案例 189
7.4 mipmap紋理技術 193
7.5 多重紋理與過程紋理 194
7.5.1 案例概覽 194
7.5.2 將2D紋理映射到球面上的策略 195
7.5.3 案例的場景結構 196
7.5.4 開發過程 197
7.6 壓縮紋理的使用 203
7.7 本章小結 205
第8章 豐富的立體形狀——3D基本形狀的構建 206
8.1 圓柱體 206
8.1.1 頂點原始位置的生成 206
8.1.2 案例的開發 208
8.2 圓錐體 210
8.2.1 頂點原始位置的生成 210
8.2.2 案例的開發 212
8.3 圓環體 213
8.3.1 頂點原始位置的生成 213
8.3.2 案例的開發 214
8.4 螺旋管 216
8.4.1 頂點原始位置的生成 216
8.4.2 案例的開發 217
8.5 幾何球 218
8.5.1 頂點原始位置的生成 218
8.5.2 案例的開發 220
8.6 足球碳分子模型的搭建 224
8.6.1 搭建的基本原理 225
8.6.2 案例的開發 227
8.7 貝塞爾曲線及旋轉面 229
8.7.1 三維旋轉曲面的生成 230
8.7.2 貝塞爾曲線 230
8.7.3 Bezier曲線生成工具 231
8.7.4 印度古典建築場景的開發 233
8.8 本章小結 234
第9章 更逼真的遊戲場景——3D模型載入 235
9.1 obj模型檔案概述 235
9.1.1 obj檔案的格式 235
9.1.2 用3ds Max設計3D模型 236
9.2 載入obj檔案 237
9.2.1 載入僅有頂點坐標與面數據的obj檔案 237
9.2.2 載入後自動計算面法向量 240
9.2.3 載入後自動計算平均法向量 242
9.2.4 載入紋理坐標 245
9.3 本章小結 247
第10章 獨特的場景渲染技術——混合與霧 248
10.1 混合技術 248
10.1.1 混合基本知識 248
10.1.2 源因子和目標因子 249
10.1.3 簡單混合效果案例 250
10.2 地月系雲層效果的實現 252
10.3 霧 254
10.3.1 霧的原理與優勢 254
10.3.2 霧的簡單實現 255
10.4 本章小結 257
第11章 常用的3D開發技巧——標誌板、天空盒、鏡像繪製等 258
11.1 標誌板 258
11.1.1 案例效果與基本原理 258
11.1.2 開發步驟 259
11.2 灰度圖地形 262
11.2.1 基本原理 263
11.2.2 普通灰度圖地形 263
11.2.3 過程紋理地形 265
11.2.4 MipMap地形 268
11.3 用粒子沉積算法構建地形 269
11.3.1 粒子沉積法基本原理 269
11.3.2 地形設計器的使用 271
11.3.3 粒子沉積的核心算法類 272
11.4 天空盒與天空穹 274
11.4.1 天空盒 274
11.4.2 天空穹 275
11.4.3 天空盒與天空穹的使用技巧 277
11.5 鏡像技術 277
11.5.1 鏡像基本原理 277
11.5.2 基本效果案例 277
11.5.3 升級效果案例 280
11.6 動態文本輸出 281
11.6.1 案例效果與基本原理 281
11.6.2 具體開發步驟 282
11.7 非真實感繪製 283
11.7.1 案例效果與基本原理 284
11.7.2 具體開發步驟 284
11.8 本章小結 286
第12章 渲染出更加酷炫的3D場景——剪裁測試 287
12.1 剪裁測試 287
12.1.1 基本原理與核心代碼 287
12.1.2 一個主次視角的簡單案例 287
12.2 Alpha測試 288
12.2.1 Alpha測試基本原理 289
12.2.2 一個橢圓視窗的案例 289
12.3 模板測試 290
12.3.1 基本原理 291
12.3.2 一個簡單的案例 293
12.4 任意剪裁平面 294
12.4.1 基本原理 294
12.4.2 茶壺被任意平面剪裁的案例 294
12.5 本章小結 296
第13章 引人入勝的遊戲特性——感測器套用開發 297
13.1 基本的開發流程 297
13.2 加速度感測器 299
13.2.1 加速度感測器簡介 299
13.2.2 案例的開發 300
13.3 磁場感測器 301
13.3.1 磁場感測器簡介 301
13.3.2 案例的開發 301
13.4 陀螺儀感測器 302
13.4.1 陀螺儀感測器簡介 302
13.4.2 案例的開發 302
13.5 光感測器 304
13.5.1 光感測器簡介 304
13.5.2 案例的開發 304
13.6 溫度感測器 305
13.6.1 溫度感測器簡介 305
13.6.2 案例的開發 305
13.7 接近感測器 306
13.7.1 接近感測器簡介 306
13.7.2 案例的開發 307
13.8 姿態感測器 308
13.8.1 姿態感測器簡介 308
13.8.2 案例的開發 310
13.9 加速度感測器綜合案例 311
13.10 感測器的坐標軸問題 313
13.11 本章小結 316
第14章 移動開發平台上的主角——Android NDK及iOS平台下的OpenGL ES開發 317
14.1 使用Android NDK進行OpenGL ES開發 317
14.1.1 Android NDK開發環境的下載及配置 317
14.1.2 Android NDK在Eclipse中的配置 320
14.1.3 使用Android NDK開發簡單的OpenGL ES 2.0程式 322
14.2 使用Android NDK開發山地地形場景 328
14.2.1 案例效果及山地繪製類的開發 329
14.2.2 NDK端渲染函式的開發 331
14.3 基於iOS平台開發OpenGL ES 2.0程式 332
14.3.1 案例運行效果及Xcode項目的創建 332
14.3.2 案例的開發過程 334
14.4 基於iOS平台的地月系場景案例 337
14.4.1 案例運行效果及GLView的開發 337
14.4.2 其他部分的開發 338
14.5 本章小節 340
第15章 Web端3D遊戲開發——WebGL 3D套用開發 341
15.1 WebGL概覽 341
15.1.1 WebGL簡介 341
15.1.2 WebGL效果展示 341
15.2 初識WebGL套用 342
15.2.1 Obj模型載入工具簡介 342
15.2.2 簡單渲染3D模型案例的開發 344
15.3 加入光照效果的WebGL案例 349
15.3.1 生成帶有法向量數據的JavaScript腳本檔案 349
15.3.2 案例的具體開發 350
15.4 帶有紋理貼圖的WebGL案例 351
15.4.1 生成帶有法向量和紋理坐標數據的JavaScript腳本檔案 351
15.4.2 案例的開發 351
15.4.3 WebGL版的地月系案例 353
15.5 本章小節 354
第16章 綜合案例一——夜鷹行動 355
16.1 遊戲背景及功能概述 355
16.1.1 遊戲開發的背景概述 355
16.1.2 遊戲功能介紹 355
16.2 遊戲的策劃及準備工作 358
16.2.1 遊戲的策劃 358
16.2.2 Android平台下遊戲開發的準備工作 359
16.3 遊戲的架構 362
16.3.1 各個類的簡要介紹 362
16.3.2 遊戲框架簡介 365
16.4 公共類Aircraft_Activity 366
16.5 遊戲相關類 368
16.5.1 遊戲界面繪製類(GLGameView) 369
16.5.2 遊戲執行緒類(KeyThread) 380
16.5.3 子彈類(BulletForControl) 391
16.5.4 坦克類(TanKe) 395
16.5.5 山地繪製類(LandForm) 399
16.5.6 顏色圓面類(CircleForDraw) 400
16.5.7 星空類(SkyNight) 402
16.5.8 爆炸效果繪製類(DrawBomb) 403
16.5.9 數字繪製類(NumberForDraw) 404
16.6 該遊戲中的著色器 405
16.6 .1 載入界面著色器 405
16.6.2 地形著色器 405
16.6.3 按鈕著色器 407
16.6.4 星空著色器 407
16.6.5 生命值矩形著色器 408
16.6.6 顏色圓面著色器 408
16.7 遊戲的最佳化與改進 408
第17章 綜合案例二——BN賽艇 410
17.1 遊戲背景及功能概述 410
17.1.1 遊戲開發的背景概述 410
17.1.2 遊戲功能介紹 410
17.2 遊戲的策劃及準備工作 412
17.2.1 遊戲的策劃 412
17.2.2 Android平台下遊戲的準備工作 413
17.3 遊戲的架構 416
17.3.1 各個類簡要介紹 417
17.3.2 遊戲框架簡介 421
17.4 主控制類(MyActivity) 423
17.5 2D界面相關類 426
17.5.1 歡迎界面類(WelcomeView) 426
17.5.2 2D界面父類(MySFView) 427
17.5.3 主選單類(MenuView) 427
17.5.4 2D界面繪製類(ViewForDraw) 428
17.5.5 資料庫工具類(DBUtil) 429
17.5.6 Android系統版本對話框(AndroidVersionDialog) 431
17.6 選船界面相關類 431
17.6.1 著色器管理類(ShaderManager) 432
17.6.2 圍牆類(ColorLightRect) 432
17.6.3 選船房間類(HouseForDraw) 433
17.6.4 展台類(DisplayStation) 435
17.6.5 賽艇類(Boat) 436
17.6.6 選船界面(XCSurfaceView) 436
17.7 遊戲界面相關類 441
17.7.1 進度條類(Process) 441
17.7.2 3D物體父類(BNDrawer) 442
17.7.3 3D物體控制類(TDObjectForControl) 442
17.7.4 賽艇類(Boat) 443
17.7.5 可碰撞物體父類(KZBJDrawer) 444
17.7.6 可碰撞物體控制類(KZBJForControl) 444
17.7.7 賽艇與可碰撞物體檢測碰撞執行緒(ThreadColl) 446
17.7.8 可吃物體父類(SpeedForEat) 446
17.7.9 可吃物體控制類(SpeedForControl) 447
17.7.10 晶體旋轉執行緒(RotateThread) 448
17.7.11 賽艇與晶體碰撞檢測執行緒(ThreadForEat) 449
17.7.12 比較兩灌木距離攝像機距離類(MyComparable) 449
17.7.13 單個灌木類(SingleShrub) 450
17.7.14 灌木控制類(ShrubForControl) 451
17.7.15 賽艇賽道類(RaceTrack) 451
17.7.16 賽艇與橋碰撞檢測類(PZZ) 453
17.7.17 賽艇運動路徑工具類(PathUtil) 453
17.7.18 尾浪類(WeiLang) 454
17.7.19 水面類(Water) 455
17.7.20 遊戲界面類(MyGLSurfaceView) 456
17.7.21 運動監聽執行緒(KeyThread) 463
17.8 該遊戲中的著色器 465
17.9 遊戲的最佳化與改進 467
作者簡介
吳亞峰,畢業於
北京郵電大學,後留學澳大利亞臥龍崗大學取得碩士學位。1998年開始從事Java套用的開發,有10多年的Java開發與培訓經驗。主要的研究方向為OpenGL ES、手機遊戲、Java EE以及搜尋引擎。同時為手機遊戲、Java EE獨立軟體開發工程師,併兼任百納科技Java培訓中心首席培訓師。近十年來為數十家著名企業培養了上千名高級軟體開發人員,曾編寫過《Android 3D遊戲案例開發大全》、《Android平板電腦開發實戰詳解和典型案例》、《Android遊戲開發大全》、《Android套用案例開發大全》、《Unity 3D遊戲開發技術詳解與典型案例》等多本暢銷技術書籍。2008年年初開始關注Android平台下的套用開發,並開發出一系列優秀的Android 3D應用程式與遊戲。