本書共分14章,內容涵蓋了從OpenGLES3.x着色器的使用技巧到高級光影效果以及物理模擬問題的解決。
介紹了OpenGLES3.x中的各種緩沖區對象和頂點着色器與片元着色器的使用技巧,以及高級光影效果的實現,如凹凸映射、環境反射、陰影、倒影、鏡頭光暈等。
介紹了傑出的3D物理引擎Bullet(Java和C++版本),詳細介紹了骨骼動畫的開發,包括加載ms3d骨骼動畫以及開發自定義格式的骨骼動畫。
系統地討論了OpenGLES3.x開發中的性能優化問題,介紹了OpenGLES3.1新增的計算着色器。給出了基於NDK的大型游戲案例——火力籃球和iOS下的3D游戲案例——方塊翻轉,方便讀者快速上手應用。
本書適合游戲開發者、程序員閱讀,也適合大專院校相關專業師生的學習用書,以及培訓學校的教材。
吳亞峰,畢業於北京郵電大學,后留學澳大利亞卧龍崗大學取得碩士學位。1998年開始從事Java應用的開發,有10多年的Java開發與培訓經驗。主要的研究方向為OpenGLES、手機游戲、JavaEE以及搜索引擎。同時為手機游戲、JavaEE獨立軟件開發工程師,並兼任百納科技Java培訓中心首席培訓師。近十年來為數十家傑出企業培養了上千名高級軟件開發人員,曾編寫過《Android3D游戲案例開發大全》、《Android平板電腦開發實戰詳解和典型案例》、《Android游戲開發大全》、《Android應用案例開發大全》、《Unity3D游戲開發技術詳解與典型案例》等多本暢銷技術書籍。2008年年初開始關注Android平台下的應用開發,並開發出一系列傑出的Android3D應用程序與游戲。
目錄
第1章 緩沖區對象 1
1.1 頂點緩沖區 1
1.1.1 基本知識 1
1.1.2 一個簡單的案例 4
1.2 頂點數組對象 6
1.2.1 基本知識與案例效果 6
1.2.2 案例開發步驟 7
1.3 一致緩沖區對象 8
1.3.1 基本知識與案例效果 9
1.3.2 案例開發步驟 10
1.4 映射緩沖區對象 13
1.4.1 基本知識與案例效果 13
1.4.2 案例開發步驟 15
1.5 其他緩沖區對象操作 18
1.5.1 復制緩沖區對象 18
1.5.2 從顏色緩沖區復制紋理數據 18
1.6 幀緩沖與渲染緩沖 20
1.6.1 幀緩沖與渲染緩沖對象 20
1.6.2 案例開發步驟 23
1.7 多重渲染目標 26
1.7.1 基本知識 26
1.7.2 一個簡單的案例 26
1.8 小結 29
第2章 頂點着色器的妙用 30
2.1 飄揚的旗幟 30
2.1.1 基本原理 30
2.1.2 開發步驟 31
2.2 扭動的軟糖 33
2.2.1 基本原理 33
2.2.2 開發步驟 34
2.3 風吹椰林場景的開發 35
2.3.1 椰子樹隨風搖擺的基本原理 35
2.3.2 開發步驟 36
2.4 展翅飛翔的雄鷹 39
2.4.1 基本原理 39
2.4.2 開發步驟 40
2.5 二維扭曲 42
2.5.1 基本原理 42
2.5.2 開發步驟 43
2.6 吹氣膨脹特效 45
2.6.1 特效基本原理 46
2.6.2 特效開發步驟 46
2.7 固定渲染管線與可編程渲染管線實現方案的對比 48
2.8 小結 49
第3章 片元着色器的妙用 50
3.1 程序紋理技術 50
3.1.1 磚塊着色器 50
3.1.2 沙灘球着色器 52
3.2 數字圖像處理 53
3.2.1 卷積的基本知識 53
3.2.2 平滑過濾 54
3.2.3 邊緣檢測 55
3.2.4 銳化處理 56
3.2.5 浮雕效果 56
3.2.6 圖像漸變 58
3.2.7 卡通渲染特效 59
3.3 分形着色器 60
3.3.1 曼德布羅集簡介 61
3.3.2 曼德布羅集着色器的實現 61
3.3.3 將曼德布羅集紋理應用到實際物體上 63
3.3.4 茱莉亞集着色器的實現 63
3.4 3D紋理的妙用 65
3.4.1 噪聲函數的基礎知識 65
3.4.2 柏林噪聲函數生成工具 68
3.4.3 3D噪聲紋理木頭茶壺的開發 69
3.5 體積霧 72
3.5.1 基本原理 72
3.5.2 開發步驟 73
3.6 粒子系統火焰的開發 75
3.6.1 火焰的基本原理 75
3.6.2 普通版火焰 77
3.6.3 點精靈版火焰 82
3.6.4 變換反饋版火焰 85
3.7 小結 89
第4章 真實光學環境的模擬 90
4.1 反射環境模擬 90
4.1.1 案例效果與基本原理 90
4.1.2 反射環境開發步驟 91
4.2 折射環境模擬 93
4.2.1 案例效果與基本原理 93
4.2.2 開發步驟 95
4.3 色散效果的模擬 96
4.3.1 案例效果與基本原理 96
4.3.2 開發步驟 97
4.4 菲涅爾效果的模擬 97
4.4.1 案例效果與基本原理 97
4.4.2 菲涅爾效果開發步驟 98
4.5 凹凸映射 99
4.5.1 案例效果與基本原理 99
4.5.2 法向量紋理圖的生成 100
4.5.3 切向量的計算 103
4.5.4 案例的開發 105
4.5.5 使用3ds Max制作法向量紋理圖 109
4.6 高真實感地形 111
4.6.1 基本思路 111
4.6.2 一個簡單的案例 112
4.7 鏡頭光暈 115
4.7.1 基本原理 115
4.7.2 一個簡單的案例 116
4.8 小結 119
第5章 陰影及高級光照 120
5.1 投影貼圖 120
5.1.1 案例效果與基本原理 120
5.1.2 開發步驟 121
5.2 陰影的重要性 123
5.3 平面陰影 125
5.3.1 案例效果與基本原理 125
5.3.2 開發步驟 126
5.4 陰影映射 129
5.4.1 陰影映射案例效果與基本原理 129
5.4.2 距離紋理圖的生成 130
5.4.3 陰影場景的繪制 135
5.5 陰影貼圖 138
5.5.1 案例效果與基本原理 138
5.5.2 開發步驟 139
5.6 靜態光照貼圖 140
5.6.1 案例效果與基本原理 140
5.6.2 使用3ds Max制作靜態光照貼圖 141
5.6.3 案例的開發 142
5.7 聚光燈高級光源 144
5.7.1 案例效果與基本原理 144
5.7.2 案例的開發 145
5.8 半球光照 146
5.8.1 案例效果與基本原理 146
5.8.2 案例的開發 148
5.9 光線跟蹤 149
5.9.1 光線跟蹤案例效果與基本原理 149
5.9.2 光線跟蹤開發步驟 153
5.10 高級鏡像技術 162
5.10.1 案例效果與基本原理 162
5.10.2 開發步驟 163
5.11 高真實感水面倒影 168
5.11.1 案例效果與基本原理 168
5.11.2 開發步驟 170
5.12 運動模糊 175
5.12.1 普通運動模糊 176
5.12.2 高級運動模糊 179
5.13 小結 183
第6章 游戲開發中的物理學 184
6.1 碰撞檢測基本技術 184
6.1.1 AABB包圍盒的基本原理 184
6.1.2 AABB包圍盒的計算 185
6.1.3 AABB包圍盒的碰撞檢測 186
6.1.4 一個AABB包圍盒的案例 188
6.1.5 旋轉后的AABB包圍盒 189
6.1.6 AABB包圍盒的使用要點 193
6.1.7 OBB包圍盒 193
6.2 穿透效應 194
6.2.1 案例的運行效果與基本原理 194
6.2.2 具體開發步驟 195
6.3 粒子系統 195
6.3.1 案例運行效果與基本原理 195
6.3.2 CPU版案例的開發 196
6.3.3 GPU版案例開發步驟 197
6.4 彈簧質點模型模擬旗幟 199
6.4.1 彈簧質點模型基本原理 199
6.4.2 彈簧質點模型案例的運行效果及開發步驟 200
6.5 彈簧質點模型模擬球網 208
6.5.1 彈簧質點模型的基本原理 209
6.5.2 彈簧質點模型的案例的運行效果及開發步驟 209
6.6 小結 211
第7章 3D物理引擎一——JBullet 212
7.1 物理引擎很重要 212
7.1.1 什麼是物理引擎 212
7.1.2 常見的物理引擎 212
7.2 JBullet物理引擎概覽 214
7.2.1 基本的物理學概念 215
7.2.2 JBullet中常用類的介紹 216
7.3 箱子相互碰撞的案例 223
7.3.1 案例運行效果及准備工作 223
7.3.2 案例的基本框架結構 224
7.3.3 常量類——Constant 225
7.3.4 3D場景渲染類——MySurfaceView 225
7.3.5 水平地面——TexFloor類 227
7.3.6 箱子——TexCube類 228
7.4 復合碰撞形狀的使用 229
7.4.1 案例運行效果 229
7.4.2 立方體圓柱復合形狀——CubeCylinder類 229
7.5 凹凸地形的案例 231
7.5.1 案例運行效果 231
7.5.2 地形類——LandForm 232
7.6 任意形狀物體的碰撞 233
7.6.1 案例運行效果 233
7.6.2 加載物體類——LoadedObject VertexNormal 233
7.6.3 加載物體剛體類——LoadRigidBody 234
7.7 鉸鏈關節 235
7.7.1 鉸鏈關節的基本知識 235
7.7.2 鉸鏈關節案例的運行效果 236
7.7.3 鉸鏈關節旋轉角速度的計算 237
7.7.4 3D界面渲染類——MySurfaceView 238
7.8 滑動關節 240
7.8.1 滑動關節的基本知識 240
7.8.2 案例效果圖 241
7.8.3 3D界面渲染類——MySurfaceView 241
7.9 六自由度關節 244
7.9.1 六自由度關節的基本知識 244
7.9.2 六自由度關節案例的運行效果 245
7.9.3 人偶類——Doll 246
7.9.4 拾取時采用的點對點關節 247
7.10 交通工具 250
7.10.1 交通工具開發要點 250
7.10.2 交通工具案例的運行
效果 251
7.10.3 3D場景渲染類——
MySurfaceView 251
7.10.4 汽車類——Car 253
7.10.5 汽車繪制類——
VehicleDraw 257
7.11 小結 258
第8章 3D物理引擎二——Bullet 259
8.1 Bullet中的常用類和結構體 259
8.1.1 btScalar類——被封裝的浮點類 259
8.1.2 btVector3類——三維向量類 259
8.1.3 btTransform類——變換類 261
8.1.4 btRigidBody類——剛體類 262
8.1.5 btDynamicsWorld類——物理世界類 263
8.1.6 btDiscreteDynamicsWorld類——離散物理世界類 264
8.1.7 btSoftRigidDynamicsWorld類——支持模擬軟體的物理世界類 264
8.1.8 btCollisionShape類——碰撞形狀類 265
8.1.9 btStaticPlaneShape類——靜態平面形狀 265
8.1.10 btSphereShape類——球體形狀類 266
8.1.11 btBoxShape類——長方體盒碰撞形狀類 266
8.1.12 btCylinderShape類——圓柱形狀類 266
8.1.13 btCapsuleShape類——膠囊形狀類 266
8.1.14 btConeShape類——圓錐形狀類 267
8.1.15 btCompoundShape類——復合碰撞形狀類 267
8.2 簡單的物理場景 267
8.2.1 案例運行效果 267
8.2.2 案例的基本框架結構 268
8.2.3 3D場景渲染類——GL2JNIView類 269
8.2.4 主控制類——HelloBulletActivity類 271
8.2.5 本地方法聲明及動態庫加載類——JNIPort類 272
8.2.6 封裝的物體類——TexBody類 273
8.2.7 矩形繪制類——TextrueRect類 273
8.2.8 長方體物體類——TexCuboid類 276
8.2.9 水平地面類——TexPlane類 278
8.2.10 初始化及渲染函數文件—— main.cpp 279
8.3 各式各樣的物體下落 281
8.3.1 案例運行效果 281
8.3.2 圓錐物體類——TexCone類 282
8.3.3 球物體類——TexBall類 284
8.3.4 膠囊物體類——TexCapsule類 285
8.3.5 圓柱物體類——TexCylinderShape類 287
8.3.6 初始化及渲染函數文件——main.cpp 289
8.4 旋轉的陀螺 290
8.4.1 案例運行效果 290
8.4.2 陀螺物體類——MyCompoundShape類 290
8.4.3 初始化及渲染函數文件——main.cpp 292
8.5 消失的木塊 292
8.5.1 案例運行效果 292
8.5.2 初始化及渲染函數文件——main.cpp 293
8.6 物體碰撞下落 295
8.6.1 案例運行效果 295
8.6.2 初始化及渲染函數文件——main.cpp 296
8.7 關節 297
8.7.1 關節的父類——btTypedConstraint類 297
8.7.2 鉸鏈關節——btHingeConstraint類 297
8.7.3 鉸鏈關節的案例——球落門開 299
8.7.4 齒輪關節——btGearConstraint類 300
8.7.5 齒輪關節的案例——轉動的齒輪 301
8.7.6 點對點關節——btPoint2Point Constraint類 302
8.7.7 點對點關節的案例——懸掛的物體 303
8.7.8 滑動關節——btSliderConstraint類 304
8.7.9 滑動關節的案例——六個方向的物體滑動 305
8.7.10 六自由度關節——btGeneric6 DofConstraint類 308
8.7.11 六自由度關節的案例——掉 落的蜘蛛 309
8.8 三角形網格形狀類 311
8.8.1 三角形索引數組類——btTriangle IndexVertexArray類 311
8.8.2 層次包圍結構三角形網格形狀類——btBvhTriangleMesh Shape類 312
8.8.3 層次包圍結構三角形網格形狀類的案例——波動的水紋 313
8.9 交通工具類 316
8.9.1 交通工具類——btRaycastVehicle類 317
8.9.2 交通工具的案例——移動的小車 318
8.10 固定三角形網格形狀類 324
8.10.1 固定三角形網格形狀類——btGImpactMeshShape類 324
8.10.2 固定形狀物體案例 325
8.11 軟體 327
8.11.1 軟體幫助類——btSoftBody Helps類 327
8.11.2 軟布案例 328
8.11.3 三角形網格軟體案例 331
8.11.4 繩索軟體案例 334
8.12 光線投射回調結構體 336
8.12.1 光線投射回調結構體 ClosestRayResultCallback 336
8.12.2 光線投射的案例——旋轉 光線 337
8.13 小結 339
第9章 骨骼動畫 340
9.1 自己開發骨骼動畫 340
9.1.1 骨骼動畫的基本原理 340
9.1.2 開發步驟 343
9.1.3 機器人模型在地面上運動時的問題 348
9.2 ms3d文件的加載 351
9.2.1 ms3d文件的格式 351
9.2.2 將3ds Max動畫文件轉換為ms3d文件 355
9.2.3 Java語言加載ms3d文件案例的開發 359
9.2.4 C++語言加載ms3d文件案例的開發 372
9.3 自定義格式骨骼動畫的加載 373
9.3.1 bnggdh文件的格式 373
9.3.2 Bnggdh類 376
9.3.3 加載bnggdh文件的案例 377
9.4 小結 379
第10章 必知必會的開發技術—— 游戲開發小貼士 380
10.1 3D拾取技術 380
10.1.1 3D拾取案例效果與基本原理 380
10.1.2 開發步驟 382
10.2 多點觸控 386
10.2.1 多點觸控案例效果與基本原理 386
10.2.2 開發步驟 387
10.3 多鍵監聽 389
10.3.1 案例效果與基本原理 389
10.3.2 開發步驟 390
10.4 小結 392
第11章 讓應用運行更流暢—— 性能優化 393
11.1 着色器的優化 393
11.1.1 計算量與計算頻率相關的問題 393
11.1.2 其他需要注意的問題 394
11.2 紋理圖的優化 395
11.3 3D圖形繪制的優化 396
11.3.1 CPU階段的優化 396
11.3.2 幾何階段的優化 397
11.3.3 光柵化階段的優化 398
11.3.4 使用幀緩沖區對象時的性能問題 398
11.3.5 盡量減少狀態的變化 399
11.4 圖元重啟 399
11.4.1 基本原理 399
11.4.2 一個簡單的案例 400
11.5 幾何體實例渲染 401
11.5.1 基本原理 401
11.5.2 一個簡單的案例 402
11.5.3 基於實例渲染的海量草地 403
11.6 着色器程序的外部加載 406
11.7 計算着色器的使用 409
11.7.1 基本知識 409
11.7.2 動態法向量光照水面案例 413
11.8 小結 418
第12章 雜項 419
12.1 遮擋查詢 419
12.1.1 相關方法 419
12.1.2 案例開發步驟 420
12.2 增強現實基礎 422
12.2.1 基本知識與案例效果 422
12.2.2 一個簡單的案例 423
12.3 保存屏幕圖像 426
12.4 讀取Android系統的GPU參數 428
12.5 多重采樣抗鋸齒 429
12.5.1 基本知識與案例效果 429
12.5.2 一個簡單的案例 430
12.6 小結 431
第13章 Android NDK體育競技 游戲——火力籃球 432
13.1 游戲背景及功能簡述 432
13.1.1 背景概述 432
13.1.2 功能介紹 432
13.2 游戲的策划及准備工作 434
13.2.1 游戲的策划 434
13.2.2 Android平台下游戲開發的 准備工作 435
13.3 游戲的架構 436
13.3.1 各個類簡要介紹 436
13.3.2 游戲的框架簡介 438
13.4 游戲公共類 439
13.4.1 游戲入口類——BasketBullet Activity 439
13.4.2 場景渲染類—— GL2JNIView 440
13.4.3 本地方法聲明及動態庫加載 類——JNIPort 442
13.4.4 現實本地方法的相關文件 ——jni_code.c 443
13.4.5 現實本地方法的相關文件 ——main.cpp 443
13.5 輔助界面相關類 446
13.5.1 着色器管理類——ShaderManager 446
13.5.2 着色器腳本的開發 448
13.5.3 數據庫工具類—— SQLiteUtil 452
13.5.4 紋理矩形類—— TextureRect 454
13.5.5 游戲資源加載界面類——LoadingView 456
13.5.6 菜單界面類——MenuView 458
13.5.7 記錄界面類—— RecordView 460
13.6 游戲界面相關類 462
13.6.1 游戲界面類—— GameView 462
13.6.2 牆面剛體封裝類—— TexCuboid 467
13.6.3 籃球剛體封裝類—— TexBall 468
13.6.4 任何形狀類—— AnyShapeByVectices 470
13.6.5 任何形狀剛體封裝類—— TexTriangleMesh 473
13.6.6 任何形狀軟體封裝類—— SoftObj 474
13.7 游戲的優化及改進 476
第14章 iOS休閑類游戲——方塊翻轉 477
14.1 游戲背景及功能概述 477
14.1.1 游戲背景概述 477
14.1.2 游戲功能介紹 477
14.2 游戲的策划及准備工作 480
14.2.1 游戲的策划 480
14.2.2 手機平台下游戲的准備工作 480
14.3 游戲的架構 482
14.3.1 各個類簡要介紹 482
14.3.2 游戲框架簡介 484
14.4 界面顯示類 485
14.4.1 GLView類 485
14.4.2 顯示界面類RenderingEngine2 486
14.4.3 游戲界面類GameView 488
14.4.4 幫助界面類HelpView 491
14.5 輔助工具類 493
14.5.1 常量類Constant 493
14.5.2 計算交點坐標輔助類 IntersectantUtil 494
14.6 繪制相關類 495
14.6.1 3D模型繪制類的開發 495
14.6.2 2D物體繪制類的開發 500
14.7 游戲的優化及改進 501
14.8 小結 502
1.1 頂點緩沖區 1
1.1.1 基本知識 1
1.1.2 一個簡單的案例 4
1.2 頂點數組對象 6
1.2.1 基本知識與案例效果 6
1.2.2 案例開發步驟 7
1.3 一致緩沖區對象 8
1.3.1 基本知識與案例效果 9
1.3.2 案例開發步驟 10
1.4 映射緩沖區對象 13
1.4.1 基本知識與案例效果 13
1.4.2 案例開發步驟 15
1.5 其他緩沖區對象操作 18
1.5.1 復制緩沖區對象 18
1.5.2 從顏色緩沖區復制紋理數據 18
1.6 幀緩沖與渲染緩沖 20
1.6.1 幀緩沖與渲染緩沖對象 20
1.6.2 案例開發步驟 23
1.7 多重渲染目標 26
1.7.1 基本知識 26
1.7.2 一個簡單的案例 26
1.8 小結 29
第2章 頂點着色器的妙用 30
2.1 飄揚的旗幟 30
2.1.1 基本原理 30
2.1.2 開發步驟 31
2.2 扭動的軟糖 33
2.2.1 基本原理 33
2.2.2 開發步驟 34
2.3 風吹椰林場景的開發 35
2.3.1 椰子樹隨風搖擺的基本原理 35
2.3.2 開發步驟 36
2.4 展翅飛翔的雄鷹 39
2.4.1 基本原理 39
2.4.2 開發步驟 40
2.5 二維扭曲 42
2.5.1 基本原理 42
2.5.2 開發步驟 43
2.6 吹氣膨脹特效 45
2.6.1 特效基本原理 46
2.6.2 特效開發步驟 46
2.7 固定渲染管線與可編程渲染管線實現方案的對比 48
2.8 小結 49
第3章 片元着色器的妙用 50
3.1 程序紋理技術 50
3.1.1 磚塊着色器 50
3.1.2 沙灘球着色器 52
3.2 數字圖像處理 53
3.2.1 卷積的基本知識 53
3.2.2 平滑過濾 54
3.2.3 邊緣檢測 55
3.2.4 銳化處理 56
3.2.5 浮雕效果 56
3.2.6 圖像漸變 58
3.2.7 卡通渲染特效 59
3.3 分形着色器 60
3.3.1 曼德布羅集簡介 61
3.3.2 曼德布羅集着色器的實現 61
3.3.3 將曼德布羅集紋理應用到實際物體上 63
3.3.4 茱莉亞集着色器的實現 63
3.4 3D紋理的妙用 65
3.4.1 噪聲函數的基礎知識 65
3.4.2 柏林噪聲函數生成工具 68
3.4.3 3D噪聲紋理木頭茶壺的開發 69
3.5 體積霧 72
3.5.1 基本原理 72
3.5.2 開發步驟 73
3.6 粒子系統火焰的開發 75
3.6.1 火焰的基本原理 75
3.6.2 普通版火焰 77
3.6.3 點精靈版火焰 82
3.6.4 變換反饋版火焰 85
3.7 小結 89
第4章 真實光學環境的模擬 90
4.1 反射環境模擬 90
4.1.1 案例效果與基本原理 90
4.1.2 反射環境開發步驟 91
4.2 折射環境模擬 93
4.2.1 案例效果與基本原理 93
4.2.2 開發步驟 95
4.3 色散效果的模擬 96
4.3.1 案例效果與基本原理 96
4.3.2 開發步驟 97
4.4 菲涅爾效果的模擬 97
4.4.1 案例效果與基本原理 97
4.4.2 菲涅爾效果開發步驟 98
4.5 凹凸映射 99
4.5.1 案例效果與基本原理 99
4.5.2 法向量紋理圖的生成 100
4.5.3 切向量的計算 103
4.5.4 案例的開發 105
4.5.5 使用3ds Max制作法向量紋理圖 109
4.6 高真實感地形 111
4.6.1 基本思路 111
4.6.2 一個簡單的案例 112
4.7 鏡頭光暈 115
4.7.1 基本原理 115
4.7.2 一個簡單的案例 116
4.8 小結 119
第5章 陰影及高級光照 120
5.1 投影貼圖 120
5.1.1 案例效果與基本原理 120
5.1.2 開發步驟 121
5.2 陰影的重要性 123
5.3 平面陰影 125
5.3.1 案例效果與基本原理 125
5.3.2 開發步驟 126
5.4 陰影映射 129
5.4.1 陰影映射案例效果與基本原理 129
5.4.2 距離紋理圖的生成 130
5.4.3 陰影場景的繪制 135
5.5 陰影貼圖 138
5.5.1 案例效果與基本原理 138
5.5.2 開發步驟 139
5.6 靜態光照貼圖 140
5.6.1 案例效果與基本原理 140
5.6.2 使用3ds Max制作靜態光照貼圖 141
5.6.3 案例的開發 142
5.7 聚光燈高級光源 144
5.7.1 案例效果與基本原理 144
5.7.2 案例的開發 145
5.8 半球光照 146
5.8.1 案例效果與基本原理 146
5.8.2 案例的開發 148
5.9 光線跟蹤 149
5.9.1 光線跟蹤案例效果與基本原理 149
5.9.2 光線跟蹤開發步驟 153
5.10 高級鏡像技術 162
5.10.1 案例效果與基本原理 162
5.10.2 開發步驟 163
5.11 高真實感水面倒影 168
5.11.1 案例效果與基本原理 168
5.11.2 開發步驟 170
5.12 運動模糊 175
5.12.1 普通運動模糊 176
5.12.2 高級運動模糊 179
5.13 小結 183
第6章 游戲開發中的物理學 184
6.1 碰撞檢測基本技術 184
6.1.1 AABB包圍盒的基本原理 184
6.1.2 AABB包圍盒的計算 185
6.1.3 AABB包圍盒的碰撞檢測 186
6.1.4 一個AABB包圍盒的案例 188
6.1.5 旋轉后的AABB包圍盒 189
6.1.6 AABB包圍盒的使用要點 193
6.1.7 OBB包圍盒 193
6.2 穿透效應 194
6.2.1 案例的運行效果與基本原理 194
6.2.2 具體開發步驟 195
6.3 粒子系統 195
6.3.1 案例運行效果與基本原理 195
6.3.2 CPU版案例的開發 196
6.3.3 GPU版案例開發步驟 197
6.4 彈簧質點模型模擬旗幟 199
6.4.1 彈簧質點模型基本原理 199
6.4.2 彈簧質點模型案例的運行效果及開發步驟 200
6.5 彈簧質點模型模擬球網 208
6.5.1 彈簧質點模型的基本原理 209
6.5.2 彈簧質點模型的案例的運行效果及開發步驟 209
6.6 小結 211
第7章 3D物理引擎一——JBullet 212
7.1 物理引擎很重要 212
7.1.1 什麼是物理引擎 212
7.1.2 常見的物理引擎 212
7.2 JBullet物理引擎概覽 214
7.2.1 基本的物理學概念 215
7.2.2 JBullet中常用類的介紹 216
7.3 箱子相互碰撞的案例 223
7.3.1 案例運行效果及准備工作 223
7.3.2 案例的基本框架結構 224
7.3.3 常量類——Constant 225
7.3.4 3D場景渲染類——MySurfaceView 225
7.3.5 水平地面——TexFloor類 227
7.3.6 箱子——TexCube類 228
7.4 復合碰撞形狀的使用 229
7.4.1 案例運行效果 229
7.4.2 立方體圓柱復合形狀——CubeCylinder類 229
7.5 凹凸地形的案例 231
7.5.1 案例運行效果 231
7.5.2 地形類——LandForm 232
7.6 任意形狀物體的碰撞 233
7.6.1 案例運行效果 233
7.6.2 加載物體類——LoadedObject VertexNormal 233
7.6.3 加載物體剛體類——LoadRigidBody 234
7.7 鉸鏈關節 235
7.7.1 鉸鏈關節的基本知識 235
7.7.2 鉸鏈關節案例的運行效果 236
7.7.3 鉸鏈關節旋轉角速度的計算 237
7.7.4 3D界面渲染類——MySurfaceView 238
7.8 滑動關節 240
7.8.1 滑動關節的基本知識 240
7.8.2 案例效果圖 241
7.8.3 3D界面渲染類——MySurfaceView 241
7.9 六自由度關節 244
7.9.1 六自由度關節的基本知識 244
7.9.2 六自由度關節案例的運行效果 245
7.9.3 人偶類——Doll 246
7.9.4 拾取時采用的點對點關節 247
7.10 交通工具 250
7.10.1 交通工具開發要點 250
7.10.2 交通工具案例的運行
效果 251
7.10.3 3D場景渲染類——
MySurfaceView 251
7.10.4 汽車類——Car 253
7.10.5 汽車繪制類——
VehicleDraw 257
7.11 小結 258
第8章 3D物理引擎二——Bullet 259
8.1 Bullet中的常用類和結構體 259
8.1.1 btScalar類——被封裝的浮點類 259
8.1.2 btVector3類——三維向量類 259
8.1.3 btTransform類——變換類 261
8.1.4 btRigidBody類——剛體類 262
8.1.5 btDynamicsWorld類——物理世界類 263
8.1.6 btDiscreteDynamicsWorld類——離散物理世界類 264
8.1.7 btSoftRigidDynamicsWorld類——支持模擬軟體的物理世界類 264
8.1.8 btCollisionShape類——碰撞形狀類 265
8.1.9 btStaticPlaneShape類——靜態平面形狀 265
8.1.10 btSphereShape類——球體形狀類 266
8.1.11 btBoxShape類——長方體盒碰撞形狀類 266
8.1.12 btCylinderShape類——圓柱形狀類 266
8.1.13 btCapsuleShape類——膠囊形狀類 266
8.1.14 btConeShape類——圓錐形狀類 267
8.1.15 btCompoundShape類——復合碰撞形狀類 267
8.2 簡單的物理場景 267
8.2.1 案例運行效果 267
8.2.2 案例的基本框架結構 268
8.2.3 3D場景渲染類——GL2JNIView類 269
8.2.4 主控制類——HelloBulletActivity類 271
8.2.5 本地方法聲明及動態庫加載類——JNIPort類 272
8.2.6 封裝的物體類——TexBody類 273
8.2.7 矩形繪制類——TextrueRect類 273
8.2.8 長方體物體類——TexCuboid類 276
8.2.9 水平地面類——TexPlane類 278
8.2.10 初始化及渲染函數文件—— main.cpp 279
8.3 各式各樣的物體下落 281
8.3.1 案例運行效果 281
8.3.2 圓錐物體類——TexCone類 282
8.3.3 球物體類——TexBall類 284
8.3.4 膠囊物體類——TexCapsule類 285
8.3.5 圓柱物體類——TexCylinderShape類 287
8.3.6 初始化及渲染函數文件——main.cpp 289
8.4 旋轉的陀螺 290
8.4.1 案例運行效果 290
8.4.2 陀螺物體類——MyCompoundShape類 290
8.4.3 初始化及渲染函數文件——main.cpp 292
8.5 消失的木塊 292
8.5.1 案例運行效果 292
8.5.2 初始化及渲染函數文件——main.cpp 293
8.6 物體碰撞下落 295
8.6.1 案例運行效果 295
8.6.2 初始化及渲染函數文件——main.cpp 296
8.7 關節 297
8.7.1 關節的父類——btTypedConstraint類 297
8.7.2 鉸鏈關節——btHingeConstraint類 297
8.7.3 鉸鏈關節的案例——球落門開 299
8.7.4 齒輪關節——btGearConstraint類 300
8.7.5 齒輪關節的案例——轉動的齒輪 301
8.7.6 點對點關節——btPoint2Point Constraint類 302
8.7.7 點對點關節的案例——懸掛的物體 303
8.7.8 滑動關節——btSliderConstraint類 304
8.7.9 滑動關節的案例——六個方向的物體滑動 305
8.7.10 六自由度關節——btGeneric6 DofConstraint類 308
8.7.11 六自由度關節的案例——掉 落的蜘蛛 309
8.8 三角形網格形狀類 311
8.8.1 三角形索引數組類——btTriangle IndexVertexArray類 311
8.8.2 層次包圍結構三角形網格形狀類——btBvhTriangleMesh Shape類 312
8.8.3 層次包圍結構三角形網格形狀類的案例——波動的水紋 313
8.9 交通工具類 316
8.9.1 交通工具類——btRaycastVehicle類 317
8.9.2 交通工具的案例——移動的小車 318
8.10 固定三角形網格形狀類 324
8.10.1 固定三角形網格形狀類——btGImpactMeshShape類 324
8.10.2 固定形狀物體案例 325
8.11 軟體 327
8.11.1 軟體幫助類——btSoftBody Helps類 327
8.11.2 軟布案例 328
8.11.3 三角形網格軟體案例 331
8.11.4 繩索軟體案例 334
8.12 光線投射回調結構體 336
8.12.1 光線投射回調結構體 ClosestRayResultCallback 336
8.12.2 光線投射的案例——旋轉 光線 337
8.13 小結 339
第9章 骨骼動畫 340
9.1 自己開發骨骼動畫 340
9.1.1 骨骼動畫的基本原理 340
9.1.2 開發步驟 343
9.1.3 機器人模型在地面上運動時的問題 348
9.2 ms3d文件的加載 351
9.2.1 ms3d文件的格式 351
9.2.2 將3ds Max動畫文件轉換為ms3d文件 355
9.2.3 Java語言加載ms3d文件案例的開發 359
9.2.4 C++語言加載ms3d文件案例的開發 372
9.3 自定義格式骨骼動畫的加載 373
9.3.1 bnggdh文件的格式 373
9.3.2 Bnggdh類 376
9.3.3 加載bnggdh文件的案例 377
9.4 小結 379
第10章 必知必會的開發技術—— 游戲開發小貼士 380
10.1 3D拾取技術 380
10.1.1 3D拾取案例效果與基本原理 380
10.1.2 開發步驟 382
10.2 多點觸控 386
10.2.1 多點觸控案例效果與基本原理 386
10.2.2 開發步驟 387
10.3 多鍵監聽 389
10.3.1 案例效果與基本原理 389
10.3.2 開發步驟 390
10.4 小結 392
第11章 讓應用運行更流暢—— 性能優化 393
11.1 着色器的優化 393
11.1.1 計算量與計算頻率相關的問題 393
11.1.2 其他需要注意的問題 394
11.2 紋理圖的優化 395
11.3 3D圖形繪制的優化 396
11.3.1 CPU階段的優化 396
11.3.2 幾何階段的優化 397
11.3.3 光柵化階段的優化 398
11.3.4 使用幀緩沖區對象時的性能問題 398
11.3.5 盡量減少狀態的變化 399
11.4 圖元重啟 399
11.4.1 基本原理 399
11.4.2 一個簡單的案例 400
11.5 幾何體實例渲染 401
11.5.1 基本原理 401
11.5.2 一個簡單的案例 402
11.5.3 基於實例渲染的海量草地 403
11.6 着色器程序的外部加載 406
11.7 計算着色器的使用 409
11.7.1 基本知識 409
11.7.2 動態法向量光照水面案例 413
11.8 小結 418
第12章 雜項 419
12.1 遮擋查詢 419
12.1.1 相關方法 419
12.1.2 案例開發步驟 420
12.2 增強現實基礎 422
12.2.1 基本知識與案例效果 422
12.2.2 一個簡單的案例 423
12.3 保存屏幕圖像 426
12.4 讀取Android系統的GPU參數 428
12.5 多重采樣抗鋸齒 429
12.5.1 基本知識與案例效果 429
12.5.2 一個簡單的案例 430
12.6 小結 431
第13章 Android NDK體育競技 游戲——火力籃球 432
13.1 游戲背景及功能簡述 432
13.1.1 背景概述 432
13.1.2 功能介紹 432
13.2 游戲的策划及准備工作 434
13.2.1 游戲的策划 434
13.2.2 Android平台下游戲開發的 准備工作 435
13.3 游戲的架構 436
13.3.1 各個類簡要介紹 436
13.3.2 游戲的框架簡介 438
13.4 游戲公共類 439
13.4.1 游戲入口類——BasketBullet Activity 439
13.4.2 場景渲染類—— GL2JNIView 440
13.4.3 本地方法聲明及動態庫加載 類——JNIPort 442
13.4.4 現實本地方法的相關文件 ——jni_code.c 443
13.4.5 現實本地方法的相關文件 ——main.cpp 443
13.5 輔助界面相關類 446
13.5.1 着色器管理類——ShaderManager 446
13.5.2 着色器腳本的開發 448
13.5.3 數據庫工具類—— SQLiteUtil 452
13.5.4 紋理矩形類—— TextureRect 454
13.5.5 游戲資源加載界面類——LoadingView 456
13.5.6 菜單界面類——MenuView 458
13.5.7 記錄界面類—— RecordView 460
13.6 游戲界面相關類 462
13.6.1 游戲界面類—— GameView 462
13.6.2 牆面剛體封裝類—— TexCuboid 467
13.6.3 籃球剛體封裝類—— TexBall 468
13.6.4 任何形狀類—— AnyShapeByVectices 470
13.6.5 任何形狀剛體封裝類—— TexTriangleMesh 473
13.6.6 任何形狀軟體封裝類—— SoftObj 474
13.7 游戲的優化及改進 476
第14章 iOS休閑類游戲——方塊翻轉 477
14.1 游戲背景及功能概述 477
14.1.1 游戲背景概述 477
14.1.2 游戲功能介紹 477
14.2 游戲的策划及准備工作 480
14.2.1 游戲的策划 480
14.2.2 手機平台下游戲的准備工作 480
14.3 游戲的架構 482
14.3.1 各個類簡要介紹 482
14.3.2 游戲框架簡介 484
14.4 界面顯示類 485
14.4.1 GLView類 485
14.4.2 顯示界面類RenderingEngine2 486
14.4.3 游戲界面類GameView 488
14.4.4 幫助界面類HelpView 491
14.5 輔助工具類 493
14.5.1 常量類Constant 493
14.5.2 計算交點坐標輔助類 IntersectantUtil 494
14.6 繪制相關類 495
14.6.1 3D模型繪制類的開發 495
14.6.2 2D物體繪制類的開發 500
14.7 游戲的優化及改進 501
14.8 小結 502
網路書店
類別
折扣
價格
-
新書87折$465