Cocos2d-x 3D与VR游戏开发实战详解
出版时间: 2017年版
内容简介
内 容 提 要本书共分为15章,全面讲解了用Cocos2d-x引擎进行3D游戏开发的知识和开发技巧,首先介绍3D开发中使用到的相关Cocos2d-x基础类,包括加载模型、背面剪裁、摄像机、骨骼动画、异步加载和自定义着色器等,接下来介绍常用的3D开发技巧,如标志板技术、天空盒、立方图纹理、水特效和材质系统、Cocos2d-x引擎中的地形(Terrain类)和导航网格(NavMesh类),适合模拟室外的平原、高山、丘陵等,使游戏场景更加丰富,也讲解了拾取与包围盒、光照和阴影、3D粒子系统与拖尾效果的使用、正六边形瓦片地图、正六边形地图的路径搜素和手机截屏等方面的知识,以及Bullet物理引擎、VR游戏开发等知识,最后讲解了综合案例,包括益智类游戏—指尖方块和射击解谜类游戏—绿色行动,让读者学以致用。本书适合Cocos2d-x初学者、游戏开发者、程序员学习,也适合作为大专院校相关专业师生学习用书以及培训学校的教材。
目 录
第1章 初识Cocos2d-x\t1
1.1 Cocos2d-x的概述\t1
1.1.1 Cocos2d-x的发展史\t1
1.1.2 Cocos2d-x的市场前景\t2
1.2 Cocos2d-x开发环境的搭建\t2
1.2.1 Android Studio以及Android SDK的下载与配置\t2
1.2.2 Android NDK的下载与配置\t5
1.2.3 Cocos2d-x的下载与配置\t6
1.3 初识Cocos2d-x应用程序\t7
1.3.1 本书案例的导入与运行\t7
1.3.2 Cocos2d-x案例导入后的相关修改\t9
1.3.3 创建自己的项目\t9
1.4 本章小结\t12
第2章 3D开发基础\t13
2.1 与3D开发相关的基础知识\t13
2.1.1 基础知识\t13
2.1.2 加载obj格式模型的案例\t18
2.1.3 背面剪裁\t23
2.1.4 摄像机背景画笔\t25
2.2 骨骼动画的使用\t27
2.2.1 基础知识\t27
2.2.2 c3b文件的生成\t28
2.2.3 加载骨骼动画的案例\t29
2.2.4 骨骼动画关键帧回调的使用\t32
2.3 3D精灵的异步加载\t35
2. 3.1 异步加载的基础知识\t35
2.3.2 3D精灵的异步加载案例\t35
2.4 三种基本变换的灵活使用\t39
2.4.1 背景知识\t39
2.4.2 桌球案例的实现策略\t40
2.4.3 案例的开发\t41
2.5 3D基本动作\t45
2.5.1 基础知识\t45
2.5.2 案例的开发\t45
2.6 自定义着色器基础\t47
2.6.1 背景知识\t47
2.6.2 Cocos2d-x中的相关方法\t47
2.6.3 自定义着色器案例\t48
2.7 本章小结\t51
第3章 常用的3D开发技巧\t52
3.1 标志板技术的应用\t52
3.1.1 基础知识\t52
3.1.2 一个简单案例的开发\t53
3.2 天空盒\t57
3.2.1 基础知识\t57
3.2.2 一个简单案例的开发\t58
3.3 立方图纹理\t60
3.3.1 基础知识\t60
3.3.2 一个简单案例的开发\t60
3.4 让游戏更加灵动—水特效\t62
3.4.1 基础知识\t63
3.4.2 一个简单案例的开发\t63
3.5 压缩纹理的使用\t69
3.6 材质系统\t70
3.6.1 基础知识\t70
3.6.2 一个简单案例的开发\t71
3.7 本章小结\t74
第4章 3D地形和导航网格\t75
4.1 地形的基础知识\t75
4.2 地形制作相关工具\t78
4.2.1 TerrainEditTool的下载\t78
4.2.2 TerrainEditTool的使用\t79
4.2.3 地形预烘焙贴图制作\t82
4.3 3D地形案例开发\t85
4.3.1 定向光照案例\t85
4.3.2 可变方向光照案例\t89
4.4 导航网格的相关类\t92
4.5 导航网格设计软件\t94
4.5.1 设计软件的下载与编译\t94
4.5.2 设计软件的使用\t96
4.6 导航网格案例\t98
4.7 本章小结\t103
第5章 拾取与包围盒\t104
5.1 AABB包围盒\t104
5.1.1 基础知识\t104
5.1.2 一个简单案例的开发\t105
5.2 拾取\t107
5.2.1 基础知识\t107
5.2.2 一个简单案例的开发\t108
5.3 AABB包围盒的不精确性\t113
5.4 OBB包围盒\t116
5.4.1 基础知识\t116
5.4.2 一个简单案例的开发\t117
5.5 本章小结\t120
第6章 光照和阴影\t121
6.1 光照的使用\t121
6.1.1 基础知识\t121
6.1.2 光照开发的案例\t122
6.2 阴影的重要性\t126
6.2.1 阴影可以帮助判断物体在三维空间中的位置关系\t126
6.2.2 阴影可以反映接收体的
形状\t127
6.2.3 阴影可以表现出一些当前视点看不见的物体的信息\t127
6.2.4 通过阴影可以判断出光源的数目、位置\t128
6.3 平面阴影\t128
6.3.1 案例效果与基本原理\t128
6.3.2 案例的开发步骤\t129
6.4 投影贴图\t133
6.5 多轮渲染\t138
6.5.1 基本原理及实现策略\t138
6.5.2 镜像技术的实现\t138
6.5.3 高真实感水面倒影的实现\t142
6.6 本章小结\t147
第7章 3D粒子系统与拖尾效果的使用\t148
7.1 3D粒子系统\t148
7.1.1 基础知识\t148
7.1.2 3D粒子系统编辑器Particle Universe Editor\t150
7.1.3 一个简单粒子系统的制作\t151
7.1.4 3D粒子系统展示案例\t155
7.2 3D拖尾效果\t160
7.2.1 基础知识\t160
7.2.2 一个简单案例的开发\t161
7.3 本章小结\t163
第8章 杂项\t164
8.1 正六边形瓦片地图\t164
8.1.1 基本原理及特点\t164
8.1.2 正六边形地图的设计\t165
8.1.3 网格定位案例\t168
8.2 正六边形地图的路径搜索\t172
8.2.1 路径搜索示例基本框架的
搭建\t172
8.2.2 广度优先路径搜索算法
BFS\t178
8.2.3 广度优先路径搜索算法BFS的实现\t179
8.2.4 Dijkstra路径搜索算法\t185
8.2.5 Dijkstra路径搜索算法的
实现\t186
8.2.6 用A*思想优化广度优先路径搜索\t190
8.2.7 用A*思想优化Dijkstra路径搜索\t192
8.3 手机截屏\t193
8.3.1 基础知识\t194
8.3.2 案例开发\t194
8.4 本章小结\t196
第9章 初识3D物理引擎Bullet\t197
9.1 常用类的介绍\t197
9.1.1 Vec3类—三维向量类\t197
9.1.2 Mat4类—矩阵类\t198
9.1.3 Physics3D类—
3D物理类\t199
9.1.4 PhysicsSprite3D类—
3D物理精灵类\t200
9.1.5 Physics3DRigidBody类—刚体类\t201
9.1.6 Physics3DWorld类—
物理世界类\t202
9.1.7 Physics3DShape类—
碰撞形状类\t203
9.2 箱子撞击案例\t204
9.2.1 案例运行效果\t204
9.2.2 案例的基本框架结构\t204
9.2.3 场景管理类—SceneManager类\t205
9.2.4 信息布景类—
My2DLayer类\t206
9.2.5 物理世界布景类—My3DLayer类\t207
9.3 物体下落案例\t212
9.3.1 案例运行效果\t212
9.3.2 物体下落布景类—My3DLayer类\t212
9.4 旋转的陀螺\t214
9.4.1 案例运行效果\t214
9.4.2 旋转的陀螺布景类—My3DLayer类\t215
9.5 消失的木块\t217
9.5.1 案例运行效果\t217
9.5.2 消失的木块布景类—My3DLayer类\t217
9.6 物体碰撞下落\t219
9.6.1 案例运行效果\t219
9.6.2 自定义物理世界类—MPhysicsWorld类\t220
9.6.3 物体碰撞下落布景类—My3DLayer类\t222
9.7 三角形网格形状的介绍\t223
9.7.1 三角形索引数组类—btTriangleIndexVertex
Array类\t223
9.7.2 层次包围结构三角形网格形状类—btBvhTriangleMesh
Shape类\t224
9.7.3 层次包围结构三角形网格
形状类的案例—波动的
水纹\t225
9.8 固定三角形网格形状类的介绍\t229
9.8.1 固定三角形网格形状类—btGImpactMeshShape类\t229
9.8.2 固定形状物体案例\t230
9.9 本章小结\t232
第10章 3D物理引擎Bullet—关节\t233
10.1 初识3D关节\t233
10.2 铰链关节\t233
10.2.1 基础知识\t233
10.2.2 案例开发\t235
10.3 齿轮关节\t237
10.3.1 基础知识\t237
10.3.2 案例开发\t237
10.4 点对点关节\t240
10.4.1 基础知识\t240
10.4.2 案例开发\t240
10.5 滑动关节\t242
10.5.1 基础知识\t242
10.5.2 案例开发\t243
10.6 六自由度关节\t245
10.6.1 基础知识\t245
10.6.2 案例开发\t246
10.7 本章小结\t250
第11章 3D物理引擎Bullet—
交通工具\t251
11.1 交通工具类—
btRaycastVehicle类\t251
11.2 交通工具的案例—
移动的小车\t253
11.3 本章小结\t258
第12章 3D物理引擎Bullet—
软体及光线投射\t259
12.1 初识3D软体\t259
12.2 软布\t259
12.2.1 案例运行效果\t260
12.2.2 软布布景类—
My3DLayer类\t260
12.2.3 软布开发中需要注意的
问题\t262
12.3 三角形网格软体案例\t263
12.3.1 案例运行效果\t263
12.3.2 三角形网格软体类—MyCustomSprite3D类\t263
12.3.3 三角形网格软体布景类—My3DLayer类\t265
12.4 绳索软体\t265
12.4.1 案例运行效果\t265
12.4.2 案例开发过程\t266
12.5 光线投射\t267
12.5.1 光线投射回调结构体Closest RayResultCallback\t268
12.5.2 光线投射的案例—
旋转光线\t268
12.6 本章小结\t270
第13章 VR游戏开发\t271
13.1 背景知识\t271
13.1.1 发展历史\t271
13.1.2 基本特征\t273
13.1.3 关键技术\t274
13.2 Cocos2d-x开发VR环境搭建\t276
13.3 Cocos2d-x开发VR游戏前的
准备\t279
13.4 Cardboard平台VR游戏的开发\t280
13.4.1 背景知识\t280
13.4.2 基础知识\t281
13.4.3 VR场景漫游案例的准备
工作\t282
13.4.4 VR场景漫游案例的开发\t283
13.5 GearVR平台VR游戏的开发\t286
13.5.1 背景知识\t286
13.5.2 Oculus Home\t287
13.5.3 基础知识\t288
13.5.4 VR场景射击案例的准备
工作\t288
13.5.5 VR场景射击案例的开发\t290
13.6 本章小结\t297
第14章 益智类游戏—指尖方块\t298
14.1 游戏的背景及功能概述\t298
14.1.1 游戏开发的背景概述\t298
14.1.2 游戏的功能介绍\t298
14.2 游戏的策划及准备工作\t301
14.2.1 游戏的策划\t301
14.2.2 游戏的准备工作\t302
14.3 游戏的架构\t305
14.3.1 游戏中各类的简要介绍\t305
14.3.2 游戏的框架简介\t306
14.4 游戏常量类—Constant\t307
14.5 场景相关类\t307
14.5.1 游戏场景管理类—SceneManager\t307
14.5.2 欢迎布景类—
BeginLayer\t310
14.5.3 主菜单场景布景类—MainMenuScene2D\t311
14.5.4 帮助场景布景类—HelpLayer\t315
14.5.5 设置场景布景类—SetLayer\t317
14.5.6 选择关卡场景布景类—SelectGameLayer\t319
14.6 游戏场景布景类\t321
14.6.1 2D布景类—My2Dlayer\t321
14.6.2 3D布景类—FirstLayer\t321
14.7 辅助类\t326
14.7.1 方块类—Cubes\t326
14.7.2 地图类—GameMap\t328
14.7.3 暂停和通关界面类—GameSet\t329
14.7.4 机关类—Organ\t332
14.7.5 碰撞检测类—Collision\t334
14.8 引擎引用入口类—
AppDelegate\t335
14.9 游戏的优化及改进\t336
14.10 本章小结\t337
第15章 射击解谜类游戏—绿色行动\t338
15.1 游戏的背景及功能概述\t338
15.1.1 游戏开发的背景概述\t338
15.1.2 游戏的功能介绍\t338
15.2 游戏的策划及准备工作\t340
15.2.1 游戏的策划\t340
15.2.2 游戏的准备工作\t341
15.3 游戏的架构\t346
15.3.1 游戏中各类的简要介绍\t346
15.3.2 游戏的框架简介\t347
15.4 游戏常量头文件—
AppConstant\t348
15.5 游戏场景布景类\t349
15.5.1 CG 1场景2D布景类—CG2DLayer\t349
15.5.2 CG 1场景3D布景类—CG3DLayer\t350
15.5.3 CG 2场景3D布景类—CG3Dlayer\t354
15.5.4 主菜单场景2D布景类—
MainMenuScene2D\t356
15.5.5 主菜单场景3D布景类—MainMenuScene3D\t357
15.5.6 异步加载类—
LoadLayer\t358
15.5.7 2D场景类的开发\t360
15.5.8 3D场景类的开发\t364
15.5.9 场景管理类的开发\t377
15.6 辅助类\t378
15.6.1 数据类—GameData\t379
15.6.2 暂停和设置界面类—GameSet\t380
15.6.3 音乐音效管理类—MusicManager\t382
15.6.4 粒子系统管理类—ParticleManager\t384
15.6.5 波动水面类Water\t385
15.6.6 英雄类—Hero\t389
15.7 引擎引用入口类—
AppDelegate\t393
15.8 游戏的优化及改进\t395
15.9 本章小结\t395