OpenGL ES 2.0 遊戲開發(上捲)-基礎技術和典型案例 OpenGL ES 2.0游戏开发(上卷):基础技术和典型案例(异步图书)

吳亞峰

已絕版

買這商品的人也買了...

相關主題

商品描述

<內容簡介>

《OpenGL ES2.0遊戲開發(附光盤上基礎技術和典型案例)》共分為17章,內容按照必知必會的基礎知識、基於OpenGLES2。0實現基本特效以及真實大型遊戲案例的順序進行詳細地講解。主要內容如下:OpenGL的渲染管線、著色語言(Shading Language)、投影及各種變換、OpenGLES2。0中光照的基本原理與實現、紋理映射的基本原理與使用、各種3D基本形狀的原理與實現、3D模型加載、混合及霧的基本原理與使用、3D開發技巧(包括標誌版、灰度圖地形、粒子沉積地形、天空盒與天空穹、鏡像技術、動態文本輸出以及非真實感繪製等一些常用的3D開發技巧)、剪裁與測試、Android中各種傳感器的使用,以及NDK及iOS平臺下的OpenGLES開發,同時還介紹瞭如何在不同的平臺間進行3D應用的移植;WebGL3D應用開發,如何將3D應用移植到WebGL平臺。最後用兩大完整案例夜鷹行動和BN賽艇貫穿整本書的實戰知識,真正幫助讀者學以致用。
    《OpenGL ES2.0遊戲開發(附光盤上基礎技術和典型案例)》中在給出實際的開發案例時涉及了AndroidSDK、AndroidNDK、iOS、WebGL等主流平臺,書中關於可編程渲染管線著色器的知識與技術還可以通用於包括WindowsPhone、MeeGO、PSP、PlayStation等移動嵌入式平臺。
    《OpenGL ES2.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