OpenGL ES 3.x 遊戲開發 (上捲) OpenGL ES 3.x游戏开发:上卷

吳亞峰

立即出貨 (庫存=1)

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

商品描述

<內容簡介>

本書共分17章,內容按照必知必會的OpenGL ES 3.x基礎知識、基於實現基本特效以及真實大型應用、遊戲案例開發的順序進行詳細地講解。主要內容為:OpenGL ES 3.x的渲染管線介紹,OpenGL ES 3.x可編程渲染管線著色器的著色語言介紹,3D開發中投影、各種變換的原理與實現,介紹了OpenGL ES 3.x中光照的基本原理與實現、點法向量與面法向量的區別以及光照的每頂點計算與每片元計算的差別,介紹了紋理映射的基本原理與使用,介紹了使用OpenGL ES 3.0開發各種3D基本形狀的實現,包括圓柱、圓錐、圓環、螺旋管、幾何球以及貝塞爾曲線旋轉面等內容,講解了3D模型加載,介紹了混合和霧的基本原理與使用以及常用3D開發技巧,如標誌板、天空盒、鏡像繪製等,介紹了OpenGL ES 3.0中經常使用的幾種剪裁與測試,包括剪裁測試、Alpha測試、模板測試以及任意剪裁平面等,講解了傳感器應用開發和Android及iOS平臺下的OpenGL ES開發。通過兩大案例,如休閒類游戲3D可愛抓娃娃和3D樓盤展示系統把所學的知識應用起來,讓讀者盡快進入實戰角色。
本書適合OpenGL ES 3D應用開發的初學者、程序員、遊戲開發者,也適合作為大專院校相關專業師生的學習用書以及培訓學校的教材。

<章節目錄>

第1章Android概述1
1.1 Android平臺的特點及未來的趨勢1
1.1.1全新理念帶來的體驗風暴1
1.1.2手機3D遊戲和應用增長
迅速2
1.2搭建Android開發環境2
1.2.1 JDK的安裝及環境變量的
配置2
1.2.2 Android SDK的下載與配置4
1.2.3 Eclipse集成開發環境的下載與配置5
1.2.4創建並啟動模擬器8
1.3 Hello Android應用程序的開發10
1.3.1第一個Android應用程序10
1.3.2 Android應用程序的項目
結構13
1.3.3 Android應用程序的調試14
1.3.4實際設備的聯機調試16
1.4已有Android項目的導入和運行16
1.4.1項目的導入16
1.4.2應用程序的運行17
1.5 Android應用程序運行的機制18
1.5.1應用程序的系統架構18
1.5.2應用程序框架18
1.5.3 Android運行時19
1.5.4系統庫19
1.5.5底層Linux內核20
1.6小結20
第2章遊戲開發相關的Android基礎知識21
2.1遊戲中的音效21
2.1.1遊戲中的即時音效21
2.1.2即時音效的一個案例22
2.1.3背景音樂播放技術24
2.1 .4簡易音樂播放器的實現26
2.2簡單數據的存儲—Preferences 29
2.2.1 Preferences簡介29
2.2.2 Preferences實現訪問時間的
記錄29
2.3手機自帶數據庫—SQLite 30
2.3.1初識SQLite 30
2.3. 2 SQLite數據庫的基本操作31
2.3.3 SQLite數據庫的簡單案例32
2.3.4使用ContentProvider組件
共享數據34
2.3.5使用ContentResolver獲取
分享數據36
2.4文件I/O 37
2.4.1訪問SD卡中的文件38
2.4.2訪問手機中的文件夾39
2.4.3讀取assets文件夾下的內容41
2.5 Socket網絡通信42
2.5.1 Socket開發基本知識42
2.5.2服務器端43
2.5.3客戶端44
2.6藍牙通信45
2.6.1藍牙通信的基本知識45
2.6.2聊天案例概覽46
2.6.3聊天案例的開發過程47
2.7小結57
第3章初識OpenGL ES 3.x 58
3.1 OpenGL ES 3.x概述58
3.1. 1 OpenGL ES 3.x簡介58
3.1.2初識OpenGL ES 3.0應用
程序61
3.1.3 OpenGL ES 3.1新特性簡介68
3.2著色器與渲染管線68
3.2.1 OpenGL ES 2.0的渲染管線68
3.2.2 OpenGL ES 3.0的渲染管線74
3.2.3 OpenGL ES中立體物體的
構建76
3.3主流手機GPU大PK 77
3.3.1手機GPU四大家族對比77
3.3.2主流GPU的性能參數比較80
3.4小結81
第4章著色語言Shading Language 82
4.1著色語言概述82
4.2著色語言基礎82
4.2.1數據類型概述83
4.2.2數據類型的基本使用87
4.2.3運算符89
4.2.4構造函數91
4.2.5類型轉換92
4.2 .6存儲限定符93
4.2.7插值限定符98
4.2.8一致塊99
4.2.9 layout限定符100
4.2.10流程控制102
4.2.11函數的聲明與使用104
4.2.12片元著色器中浮點變量
 精度的指定105
4.2.13程序的基本結構106
4.3特殊的內建變量106
4.3.1頂點著色器中的內建變量106
4.3.2片元著色器中的內建變量107
4.3.3內建常量108
4.3.4內建uniform變量108
4.4著色語言的內置函數109
4.4.1角度轉換與三角函數109
4.4.2指數函數110
4.4.3常見函數111
4.4.4幾何函數114
4.4.5矩陣函數116
4.4.6向量關係函數116
4.4.7紋理採樣函數117
4.4.8微分函數120
4.4.9浮點數的打包與解包函數120
4.5用invariant修飾符避免值變問題121
4.6預處理器122
4.7小結123
第5章必知必會的3D開發知識—
投影及各種變換124
5.1攝像機的設置124
5.2兩種投影方式125
5.2.1正交投影125
5.2.2透視投影132
5.3各種變換134
5.3.1基本變換的相關數學知識134
5.3.2平移變換135
5.3.3旋轉變換138
5.3.4縮放變換139
5.3.5基本變換的實質140
5.4所有變換的完整流程141
5.5繪製方式144
5.5.1各種繪製方式概覽145
5.5.2點與線段繪製方式146
5.5.3三角形條帶與扇面繪製方式147
5.5.4頂點法與索引法151
5.5.5 layout限定符的使用155
5.6頂點常量屬性156
5.6.1頂點常量基本知識156
5.6.2一個簡單的案例156
5.7設置合理的視角158
5.8設置合理的透視參數163
5.9多邊形偏移166
5.10捲繞和背面剪裁168
5.10.1基本知識168
5.10.2一個簡單的案例169
5.11小結170
第6章光照171
6.1曲面物體的構建171
6.1.1球體構建的基本原理171
6.1.2案例效果概覽172
6.1.3開發步驟172
6.2基本光照效果175
6.2.1光照的基本模型175
6.2 .2環境光175
6.2.3散射光177
6.2.4鏡面光181
6.2.5三種光照通道的合成185
6.3定位光與定向光187
6.4點法向量和麵法向量189
6.5光照的每頂點計算與每片元計算191
6.6小結193
第7章紋理映射194
7.1初識紋理映射194
7.1.1基本原理194
7.1.2一個簡單的案例195
7.1.3色彩通道的靈活組合199
7.2紋理拉伸201
7.2. 1三種拉伸方式概覽201
7.2.2不同拉伸方式的案例203
7.3紋理採樣207
7.3.1紋理採樣概述207
7.3.2最近點採樣207
7.3.3線性紋理採樣208
7.3.4 MIN與MAG採樣209
7.3.5不同紋理採樣方式的案例210
7.4 mipmap紋理技術214
7.5多重紋理與過程紋理215
7.5.1案例概覽215
7.5.2將2D紋理映射到球面上的
策略216
7.5.3案例的場景結構217
7.5.4開發過程218
7.6壓縮紋理的使用224
7.7點精靈226
7.7.1基本知識226
7.7.2一個簡單案例227
7.8 3D紋理229
7.9 2D紋理數組233
7.10採樣器配置對象的使用237
7.11小結239
第8章3D基本形狀的構建240
8.1圓柱體240
8.1.1頂點原始位置的生成240
8.1.2案例的開發242
8.2圓錐體244
8.2.1頂點原始位置的生成244
8.2.2案例的開發246
8.3圓環體248
8.3.1頂點原始位置的生成248
8.3.2案例的開發249
8.4螺旋管250
8.4.1頂點原始位置的生成250
8.4.2案例的開發251
8.5幾何球252
8.5.1頂點原始位置的生成252
8.5.2案例的開發254
8.6足球碳分子模型的搭建259
8.6.1搭建的基本原理259
8.6.2案例的開發261
8.7貝塞爾曲線及旋轉面264
8.7.1三維旋轉曲面的生成264
8.7.2貝塞爾曲線265
8.7.3 Bezier曲線生成工具266
8.7.4印度古典建築場景的開發268
8.8小結269
第9章更逼真的遊戲場景——3D模型
加載270
9.1 obj模型文件概述270
9.1 .1 obj文件的格式270
9.1.2用3ds Max設計3D模型271
9.2加載obj文件272
9.2.1加載僅有頂點坐標與面數據的obj文件272
9.2.2加載後自動計算面法向量275
9.2. 3加載後自動計算平均法
向量278
9.2.4加載紋理坐標280
9.2.5加載頂點法向量283
9.3雙面光照284
9.4小結286
第10章獨特的場景渲染技術—
 混合與霧287
10.1混合技術287
10.1 .1混合基本知識287
10.1.2源因子和目標因子288
10.1.3簡單混合效果案例290
10.1.4 ETC2壓縮紋理的使用292
10.2地月系雲層效果的實現295
10.3霧297
10.3.1霧的原理與優勢297
10.3.2霧的簡單實現298
10.4小結300
第11章常用的3D開發技巧—標誌板、天空盒、鏡像繪製等301
11.1標誌板301
11.1.1案例效果與基本原理301
11.1.2開發步驟302
11.2灰度圖地形305
11.2.1基本原理306
11.2.2普通灰度圖地形306
11.2.3過程紋理地形309
11.2.4 MipMap地形311
11.2.5頂點著色器採樣紋理
 地形312
11.3用粒子沉積算法構建地形314
11.3.1粒子沉積法的基本原理314
11.3.2地形設計器的使用316
11.3.3粒子沉積的核心算法類318
11.4天空盒與天空穹319
11.4.1天空盒319
11.4.2天空穹321
11.4.3天空盒與天空穹的使用
 技巧322
11.5簡單鏡像效果323
11.5.1鏡像基本原理323
11.5.2基本效果案例323
11.5.3升級效果案例326
11.6動態文本輸出327
11.6.1案例效果與基本原理327
11.6.2具體開發步驟327
11.7非真實感繪製329
11.7.1基本原理與案例效果329
11.7.2具體開發步驟331
11.8描邊效果的實現333
11.8.1沿法線擠出輪廓333
11.8.2在視空間中擠出335
11.9小結336
第12章渲染出更加酷炫的3D場景—
 幾種剪裁與測試337
12.1剪裁測試337
12.1.1基本原理與核心代碼337
12.1.2一個主次視角的簡單案例337
12.2 Alpha測試338
12.2.1 Alpha測試基本原理339
12.2.2一個橢圓窗口的案例339
12.3模板測試341
12.3.1基本原理341
12.3.2一個簡單的案例343
12.4任意剪裁平面344
12.4 .1基本原理344
12.4.2茶壺被任意平面剪裁的
 案例345
12.5小結346
第13章引人入勝的遊戲特性—
 傳感器應用開發347
13.1基本的開發流程347
13.2加速度傳感器349
13.2.1加速度傳感器簡介349
13.2. 2案例的開發350
13.3磁場傳感器351
13.3.1磁場傳感器簡介351
13.3.2案例的開發351
13.4陀螺儀傳感器352
13.4.1陀螺儀傳感器簡介352
13.4.2案例的開發353
13.5光傳感器354
13.5.1光傳感器簡介354
13.5.2案例的開發354
13.6溫度傳感器355
13.6.1溫度傳感器簡介355
13.6.2案例的開發355
13.7接近傳感器356
13.7.1接近傳感器簡介357
13.7.2案例的開發357
13.8姿態傳感器358
13.8.1姿態傳感器簡介358
13.8.2案例的開發360
13.9加速度傳感器綜合案例361
13.10傳感器的坐標軸問題363
13.11小結366
第14章Android NDK及iOS平臺下的
 OpenGL ES開發367
14.1使用Android NDK進行OpenGL ES
 開發367
14.1.1 Android NDK開發環境的下
 載及配置367
14.1.2 Android NDK項目在Eclipse
 中的配置370
14.1.3使用Android NDK開發簡單的
 OpenGL ES 3.0程序371
14.2使用Android NDK開發山地地形
 場景378
14.2.1案例效果及山地繪製類的
 開發379
14.2.2 NDK端渲染函數的開發380
14.3基於iOS平臺開發OpenGL ES 3.0
 程序382
14.3.1案例運行效果及Xcode項目的
 創建382
14.3.2案例的開發過程385
14.4基於iOS平臺的地月系場景
 案例390
14.4.1案例的運行效果391
14.4.2案例的開發過程391
14.5小結394
第15章Web端3D遊戲開發——WebGL 3D應用開發395
15.1 WebGL概覽395
15.1.1 WebGL簡介395
15.1.2 WebGL效果展示396
15.2初識WebGL應用396
15.2.1 WebGL應用案例部署運行
 步驟簡介397
15.2.2簡單渲染3D模型案例的
 開發397
15.3加入光照效果的WebGL案例404
15.4帶有紋理貼圖的WebGL案例407
15.4.1一個簡單的案例408
15.4.2 WebGL版的地月系案例411
15.5小結413
第16章休閒類游戲—3D
 可愛抓娃娃414
16.1遊戲的背景及功能概述414
16.1.1背景描述414
16.1.2功能介紹414
16.2遊戲的策劃及準備工作417
16.2.1遊戲的策劃417
16.2.2手機平臺下游戲的準備
 工作418
16.3遊戲的架構420
16.3.1各個類的簡要介紹420
16.3.2遊戲框架簡介423
16.4界面顯示類424
16.4.1顯示界麵類
 MySurfaceView 424
16.4.2遊戲界麵類GameView 426
16.4.3遊戲主菜單界麵類MainView 430
16.5輔助工具類431
16.5. 1輔助類432
16.5.2自定義管理器類436
16.5.3線程類439
16.6繪製相關類441
16.6.1 3D模型繪製類的開發441
16.6.2 BN2DObject繪製類的開發442
16.7粒子系統的開發444
16.7 .1基本原理444
16.7.2開發步驟444
16.8本遊戲中的著色器447
16.9遊戲的優化及改進449
16.10小結449
第17章基於WebGL的3D樓盤展示
 系統450
17.1應用背景及功能概述450
17.1.1背景概述450
17.1.2功能介紹450
17.2功能預覽及架構451
17.2.1基於WebGL的3D樓盤展示
 系統功能預覽451
17.2.2基於WebGL的3D樓盤展示
 系統目錄結構454
17.3 Web平臺下應用開發前的準備
 工作455
17.3.1圖片資源的蒐集455
17.3.2模型資源的採集456
17.4地圖設計器的開發457
17.4.1地圖設計器的開發設計
 思路457
17.4.2地圖設計器的框架介紹458
17.4.3地圖設計器的開發步驟458
17.5公共函數介紹461
17.5.1工具函數文件GLUtil.js 461
17.5.2 obj加載文件
 LoadObjUtil.js 463
17.5.3著色器加載文件
 LoadShaderUtil.js 464
17.5.4 3D物體繪製文件
 ObjObject .js 465
17.5.5矩陣操作函數文件
 MatrixState.js 466
17.6物體創建及繪製相關函數介紹467
17.6.1創建普通物體文件
 loadObject.js 467
17.6.2地面繪製文件
 DrawLandMaps.js 468
17.6.3普通按鈕繪製文件
 DrawButton.js 470
17.7各個功能模塊的實現470
17.7.1主界面mainView.html的
 開發470
17.7.2樓房模型界面
 houseModel.html的實現475
17.7.3戶體模型界面
 roomType.html的開發477
17.7. 4小區瀏覽界面
 residentialGarden.html的
 實現478
17.8應用中運用的著色器介紹481
17.8.1普通物體著色器481
17.8.2不帶光照物體著色器483
17.8.3天空盒著色器483
17.9應用的優化與改進484
17.10小結484