本書共分為15章, 全面講解了用Cocos2d-x引擎進行3D游戲開發(fā)的知識和開發(fā)技巧, 首先介紹3D開發(fā)中使用到的相關(guān)Cocos2d-x基礎(chǔ)類, 包括加載模型、背面剪裁、攝像機、骨骼動畫、異步加載和自定義著色器等, 接下來介紹常用的3D開發(fā)技巧, 如標志板技術(shù)、天空盒、立方圖紋理、水特效和材質(zhì)系統(tǒng)、Cocos2d-x引擎中的地形 (Terrain類) 和導(dǎo)航網(wǎng)格 (NavMesh類), 適合模擬室外的平原、高山、丘陵等, 使游戲場景更加豐富, 也講解了拾取與包圍盒、光照和陰影、3D粒子系統(tǒng)與拖尾效果的使用、正六邊形瓦片地圖、正六邊形地圖的路徑搜素和手機截屏等方面的知識, 以及Bullet物理引擎、VR游戲開發(fā)等知識, 最后講解了綜合案例, 包括益智類游戲-指尖方塊和射擊解謎類游戲-綠色行動, 讓讀者學以致用。
系統(tǒng)介紹了基于Cocos2d-x平臺進行3D游戲開發(fā)所需的各項技術(shù),主要包括基本模型的加載與渲染、3D地形和導(dǎo)航網(wǎng)格、包圍盒與拾取、光照和陰影、3D粒子系統(tǒng),同時還詳細介紹了大名鼎鼎的開源3D物理引擎Bullet在Cocos2d-x中的使用。
緊跟時代潮流,介紹了如何基于Cocos2d-x進行Cardboard及GearVR平臺虛擬現(xiàn)實游戲的開發(fā)。
給出了兩個完整的3D游戲案例,分別是“益智類游戲——指尖方塊”和“射擊解謎類游戲——綠色行動”,方便讀者快速提升實戰(zhàn)能力。
為了方便不同目標平臺讀者的學習,這兩個大案例都同時提供了Android以及iOS平臺的項目版本。
吳亞峰,畢業(yè)于北京郵電大學,后留學澳大利亞臥龍崗大學取得碩士學位。1998年開始從事Java應(yīng)用的開發(fā),有10多年的Java開發(fā)與培訓(xùn)經(jīng)驗。主要的研究方向為OpenGL ES、手機游戲、Java EE以及搜索引擎。同時為手機游戲、Java EE獨立軟件開發(fā)工程師,現(xiàn)任職于華北理工大學并兼任華北理工大學以升大學生創(chuàng)新實驗中心移動及互聯(lián)網(wǎng)軟件工作室負責人。十多年來不但指導(dǎo)學生多次制作手游作品獲得多項學科競賽大獎,還為數(shù)十家著名企業(yè)培養(yǎng)了上千名高級軟件開發(fā)人員。曾編寫過《OpenGL ES 3.0游戲開發(fā)(上下卷)》、《Cocos2d-X案例開發(fā)大全》、《Cocos2d-X 3.X 游戲案例開發(fā)大全》、《Cocos2d-X 3.0游戲開發(fā)實戰(zhàn)詳解》、《Cocos2d-x游戲開發(fā)標準教程》、《Android游戲開發(fā)大全》(第一版、第二版及第三版)等多本暢銷技術(shù)書籍。2008年初開始關(guān)注Android平臺下的3D應(yīng)用開發(fā),并開發(fā)出一系列優(yōu)秀的Android應(yīng)用程序與3D游戲。
第1章 初識Cocos2d-x 1
1.1 Cocos2d-x的概述 1
1.1.1 Cocos2d-x的發(fā)展史 1
1.1.2 Cocos2d-x的市場前景 2
1.2 Cocos2d-x開發(fā)環(huán)境的搭建 2
1.2.1 Android Studio以及Android SDK的下載與配置 2
1.2.2 Android NDK的下載與配置 5
1.2.3 Cocos2d-x的下載與配置 6
1.3 初識Cocos2d-x應(yīng)用程序 7
1.3.1 本書案例的導(dǎo)入與運行 7
1.3.2 Cocos2d-x案例導(dǎo)入后的相關(guān)修改 9
1.3.3 創(chuàng)建自己的項目 9
1.4 本章小結(jié) 12
第2章 3D開發(fā)基礎(chǔ) 13
2.1 與3D開發(fā)相關(guān)的基礎(chǔ)知識 13
2.1.1 基礎(chǔ)知識 13
2.1.2 加載obj格式模型的案例 18
2.1.3 背面剪裁 23
2.1.4 攝像機背景畫筆 25
2.2 骨骼動畫的使用 27
2.2.1 基礎(chǔ)知識 27
2.2.2 c3b文件的生成 28
2.2.3 加載骨骼動畫的案例 29
2.2.4 骨骼動畫關(guān)鍵幀回調(diào)的使用 32
2.3 3D精靈的異步加載 35
2. 3.1 異步加載的基礎(chǔ)知識 35
2.3.2 3D精靈的異步加載案例 35
2.4 三種基本變換的靈活使用 39
2.4.1 背景知識 39
2.4.2 桌球案例的實現(xiàn)策略 40
2.4.3 案例的開發(fā) 41
2.5 3D基本動作 45
2.5.1 基礎(chǔ)知識 45
2.5.2 案例的開發(fā) 45
2.6 自定義著色器基礎(chǔ) 47
2.6.1 背景知識 47
2.6.2 Cocos2d-x中的相關(guān)方法 47
2.6.3 自定義著色器案例 48
2.7 本章小結(jié) 51
第3章 常用的3D開發(fā)技巧 52
3.1 標志板技術(shù)的應(yīng)用 52
3.1.1 基礎(chǔ)知識 52
3.1.2 一個簡單案例的開發(fā) 53
3.2 天空盒 57
3.2.1 基礎(chǔ)知識 57
3.2.2 一個簡單案例的開發(fā) 58
3.3 立方圖紋理 60
3.3.1 基礎(chǔ)知識 60
3.3.2 一個簡單案例的開發(fā) 60
3.4 讓游戲更加靈動—水特效 62
3.4.1 基礎(chǔ)知識 63
3.4.2 一個簡單案例的開發(fā) 63
3.5 壓縮紋理的使用 69
3.6 材質(zhì)系統(tǒng) 70
3.6.1 基礎(chǔ)知識 70
3.6.2 一個簡單案例的開發(fā) 71
3.7 本章小結(jié) 74
第4章 3D地形和導(dǎo)航網(wǎng)格 75
4.1 地形的基礎(chǔ)知識 75
4.2 地形制作相關(guān)工具 78
4.2.1 TerrainEditTool的下載 78
4.2.2 TerrainEditTool的使用 79
4.2.3 地形預(yù)烘焙貼圖制作 82
4.3 3D地形案例開發(fā) 85
4.3.1 定向光照案例 85
4.3.2 可變方向光照案例 89
4.4 導(dǎo)航網(wǎng)格的相關(guān)類 92
4.5 導(dǎo)航網(wǎng)格設(shè)計軟件 94
4.5.1 設(shè)計軟件的下載與編譯 94
4.5.2 設(shè)計軟件的使用 96
4.6 導(dǎo)航網(wǎng)格案例 98
4.7 本章小結(jié) 103
第5章 拾取與包圍盒 104
5.1 AABB包圍盒 104
5.1.1 基礎(chǔ)知識 104
5.1.2 一個簡單案例的開發(fā) 105
5.2 拾取 107
5.2.1 基礎(chǔ)知識 107
5.2.2 一個簡單案例的開發(fā) 108
5.3 AABB包圍盒的不精確性 113
5.4 OBB包圍盒 116
5.4.1 基礎(chǔ)知識 116
5.4.2 一個簡單案例的開發(fā) 117
5.5 本章小結(jié) 120
第6章 光照和陰影 121
6.1 光照的使用 121
6.1.1 基礎(chǔ)知識 121
6.1.2 光照開發(fā)的案例 122
6.2 陰影的重要性 126
6.2.1 陰影可以幫助判斷物體在三維空間中的位置關(guān)系 126
6.2.2 陰影可以反映接收體的
形狀 127
6.2.3 陰影可以表現(xiàn)出一些當前視點看不見的物體的信息 127
6.2.4 通過陰影可以判斷出光源的數(shù)目、位置 128
6.3 平面陰影 128
6.3.1 案例效果與基本原理 128
6.3.2 案例的開發(fā)步驟 129
6.4 投影貼圖 133
6.5 多輪渲染 138
6.5.1 基本原理及實現(xiàn)策略 138
6.5.2 鏡像技術(shù)的實現(xiàn) 138
6.5.3 高真實感水面倒影的實現(xiàn) 142
6.6 本章小結(jié) 147
第7章 3D粒子系統(tǒng)與拖尾效果的使用 148
7.1 3D粒子系統(tǒng) 148
7.1.1 基礎(chǔ)知識 148
7.1.2 3D粒子系統(tǒng)編輯器Particle Universe Editor 150
7.1.3 一個簡單粒子系統(tǒng)的制作 151
7.1.4 3D粒子系統(tǒng)展示案例 155
7.2 3D拖尾效果 160
7.2.1 基礎(chǔ)知識 160
7.2.2 一個簡單案例的開發(fā) 161
7.3 本章小結(jié) 163
第8章 雜項 164
8.1 正六邊形瓦片地圖 164
8.1.1 基本原理及特點 164
8.1.2 正六邊形地圖的設(shè)計 165
8.1.3 網(wǎng)格定位案例 168
8.2 正六邊形地圖的路徑搜索 172
8.2.1 路徑搜索示例基本框架的
搭建 172
8.2.2 廣度優(yōu)先路徑搜索算法
BFS 178
8.2.3 廣度優(yōu)先路徑搜索算法BFS的實現(xiàn) 179
8.2.4 Dijkstra路徑搜索算法 185
8.2.5 Dijkstra路徑搜索算法的
實現(xiàn) 186
8.2.6 用A*思想優(yōu)化廣度優(yōu)先路徑搜索 190
8.2.7 用A*思想優(yōu)化Dijkstra路徑搜索 192
8.3 手機截屏 193
8.3.1 基礎(chǔ)知識 194
8.3.2 案例開發(fā) 194
8.4 本章小結(jié) 196
第9章 初識3D物理引擎Bullet 197
9.1 常用類的介紹 197
9.1.1 Vec3類—三維向量類 197
9.1.2 Mat4類—矩陣類 198
9.1.3 Physics3D類—
3D物理類 199
9.1.4 PhysicsSprite3D類—
3D物理精靈類 200
9.1.5 Physics3DRigidBody類—剛體類 201
9.1.6 Physics3DWorld類—
物理世界類 202
9.1.7 Physics3DShape類—
碰撞形狀類 203
9.2 箱子撞擊案例 204
9.2.1 案例運行效果 204
9.2.2 案例的基本框架結(jié)構(gòu) 204
9.2.3 場景管理類—SceneManager類 205
9.2.4 信息布景類—
My2DLayer類 206
9.2.5 物理世界布景類—My3DLayer類 207
9.3 物體下落案例 212
9.3.1 案例運行效果 212
9.3.2 物體下落布景類—My3DLayer類 212
9.4 旋轉(zhuǎn)的陀螺 214
9.4.1 案例運行效果 214
9.4.2 旋轉(zhuǎn)的陀螺布景類—My3DLayer類 215
9.5 消失的木塊 217
9.5.1 案例運行效果 217
9.5.2 消失的木塊布景類—My3DLayer類 217
9.6 物體碰撞下落 219
9.6.1 案例運行效果 219
9.6.2 自定義物理世界類—MPhysicsWorld類 220
9.6.3 物體碰撞下落布景類—My3DLayer類 222
9.7 三角形網(wǎng)格形狀的介紹 223
9.7.1 三角形索引數(shù)組類—btTriangleIndexVertex
Array類 223
9.7.2 層次包圍結(jié)構(gòu)三角形網(wǎng)格形狀類—btBvhTriangleMesh
Shape類 224
9.7.3 層次包圍結(jié)構(gòu)三角形網(wǎng)格
形狀類的案例—波動的
水紋 225
9.8 固定三角形網(wǎng)格形狀類的介紹 229
9.8.1 固定三角形網(wǎng)格形狀類—btGImpactMeshShape類 229
9.8.2 固定形狀物體案例 230
9.9 本章小結(jié) 232
第10章 3D物理引擎Bullet—關(guān)節(jié) 233
10.1 初識3D關(guān)節(jié) 233
10.2 鉸鏈關(guān)節(jié) 233
10.2.1 基礎(chǔ)知識 233
10.2.2 案例開發(fā) 235
10.3 齒輪關(guān)節(jié) 237
10.3.1 基礎(chǔ)知識 237
10.3.2 案例開發(fā) 237
10.4 點對點關(guān)節(jié) 240
10.4.1 基礎(chǔ)知識 240
10.4.2 案例開發(fā) 240
10.5 滑動關(guān)節(jié) 242
10.5.1 基礎(chǔ)知識 242
10.5.2 案例開發(fā) 243
10.6 六自由度關(guān)節(jié) 245
10.6.1 基礎(chǔ)知識 245
10.6.2 案例開發(fā) 246
10.7 本章小結(jié) 250
第11章 3D物理引擎Bullet—
交通工具 251
11.1 交通工具類—
btRaycastVehicle類 251
11.2 交通工具的案例—
移動的小車 253
11.3 本章小結(jié) 258
第12章 3D物理引擎Bullet—
軟體及光線投射 259
12.1 初識3D軟體 259
12.2 軟布 259
12.2.1 案例運行效果 260
12.2.2 軟布布景類—
My3DLayer類 260
12.2.3 軟布開發(fā)中需要注意的
問題 262
12.3 三角形網(wǎng)格軟體案例 263
12.3.1 案例運行效果 263
12.3.2 三角形網(wǎng)格軟體類—MyCustomSprite3D類 263
12.3.3 三角形網(wǎng)格軟體布景類—My3DLayer類 265
12.4 繩索軟體 265
12.4.1 案例運行效果 265
12.4.2 案例開發(fā)過程 266
12.5 光線投射 267
12.5.1 光線投射回調(diào)結(jié)構(gòu)體Closest RayResultCallback 268
12.5.2 光線投射的案例—
旋轉(zhuǎn)光線 268
12.6 本章小結(jié) 270
第13章 VR游戲開發(fā) 271
13.1 背景知識 271
13.1.1 發(fā)展歷史 271
13.1.2 基本特征 273
13.1.3 關(guān)鍵技術(shù) 274
13.2 Cocos2d-x開發(fā)VR環(huán)境搭建 276
13.3 Cocos2d-x開發(fā)VR游戲前的
準備 279
13.4 Cardboard平臺VR游戲的開發(fā) 280
13.4.1 背景知識 280
13.4.2 基礎(chǔ)知識 281
13.4.3 VR場景漫游案例的準備
工作 282
13.4.4 VR場景漫游案例的開發(fā) 283
13.5 GearVR平臺VR游戲的開發(fā) 286
13.5.1 背景知識 286
13.5.2 Oculus Home 287
13.5.3 基礎(chǔ)知識 288
13.5.4 VR場景射擊案例的準備
工作 288
13.5.5 VR場景射擊案例的開發(fā) 290
13.6 本章小結(jié) 297
第14章 益智類游戲—指尖方塊 298
14.1 游戲的背景及功能概述 298
14.1.1 游戲開發(fā)的背景概述 298
14.1.2 游戲的功能介紹 298
14.2 游戲的策劃及準備工作 301
14.2.1 游戲的策劃 301
14.2.2 游戲的準備工作 302
14.3 游戲的架構(gòu) 305
14.3.1 游戲中各類的簡要介紹 305
14.3.2 游戲的框架簡介 306
14.4 游戲常量類—Constant 307
14.5 場景相關(guān)類 307
14.5.1 游戲場景管理類—SceneManager 307
14.5.2 歡迎布景類—
BeginLayer 310
14.5.3 主菜單場景布景類—MainMenuScene2D 311
14.5.4 幫助場景布景類—HelpLayer 315
14.5.5 設(shè)置場景布景類—SetLayer 317
14.5.6 選擇關(guān)卡場景布景類—SelectGameLayer 319
14.6 游戲場景布景類 321
14.6.1 2D布景類—My2Dlayer 321
14.6.2 3D布景類—FirstLayer 321
14.7 輔助類 326
14.7.1 方塊類—Cubes 326
14.7.2 地圖類—GameMap 328
14.7.3 暫停和通關(guān)界面類—GameSet 329
14.7.4 機關(guān)類—Organ 332
14.7.5 碰撞檢測類—Collision 334
14.8 引擎引用入口類—
AppDelegate 335
14.9 游戲的優(yōu)化及改進 336
14.10 本章小結(jié) 337
第15章 射擊解謎類游戲—綠色行動 338
15.1 游戲的背景及功能概述 338
15.1.1 游戲開發(fā)的背景概述 338
15.1.2 游戲的功能介紹 338
15.2 游戲的策劃及準備工作 340
15.2.1 游戲的策劃 340
15.2.2 游戲的準備工作 341
15.3 游戲的架構(gòu) 346
15.3.1 游戲中各類的簡要介紹 346
15.3.2 游戲的框架簡介 347
15.4 游戲常量頭文件—
AppConstant 348
15.5 游戲場景布景類 349
15.5.1 CG 1場景2D布景類—CG2DLayer 349
15.5.2 CG 1場景3D布景類—CG3DLayer 350
15.5.3 CG 2場景3D布景類—CG3Dlayer 354
15.5.4 主菜單場景2D布景類—
MainMenuScene2D 356
15.5.5 主菜單場景3D布景類—MainMenuScene3D 357
15.5.6 異步加載類—
LoadLayer 358
15.5.7 2D場景類的開發(fā) 360
15.5.8 3D場景類的開發(fā) 364
15.5.9 場景管理類的開發(fā) 377
15.6 輔助類 378
15.6.1 數(shù)據(jù)類—GameData 379
15.6.2 暫停和設(shè)置界面類—GameSet 380
15.6.3 音樂音效管理類—MusicManager 382
15.6.4 粒子系統(tǒng)管理類—ParticleManager 384
15.6.5 波動水面類Water 385
15.6.6 英雄類—Hero 389
15.7 引擎引用入口類—
AppDelegate 393
15.8 游戲的優(yōu)化及改進 395
15.9 本章小結(jié) 395