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