这些资源你可能感兴趣
《我所理解的Cocos2d-x》针对最新的 Cocos2d-x 3.x版本,介绍了Coco2d-x游戏引擎的基本架构、渲染机制,以及各个子模块的功能和原理,并结合OpenGL ES图形渲染管线,深入探讨了游戏开发中涉及的相关图形学的知识,内容包括:Cocos2d-x的基本架构及渲染机制、纹理相关的知识、OpenGL ES2.0渲染管线、计算机字体的绘制、多分辨率支持、事件分发、碰撞与物理引擎、游戏对象模型架构、Genius-x开源框架、脚本在游戏引擎中的架构等。《我所理解的Cocos2d-x》偏重讲解每个知识模块的概念及原理,使读者能够透过现象看到其背后的工作机制,所以本书在内容组织上并不是围绕Cocos2d-x的接口使用来展开,而是按照通用游戏引擎架构及图形学的内容进行组织。
《我所理解的Cocos2d-x》面向中、高级开发者,可作为初级开发者进阶的教程,也可作为高校游戏引擎架构及图形学相关专业的参考教材。
编辑推荐
《我所理解的Cocos2d-x》完全基于Cocos2d-x3.0,深度剖析计算机图形学,OpenGL ES及游戏引擎架构,全面提升游戏开发相关知识。
作者简介
秦春林,自大学开始自学编程,先后从事过工作流软件,云计算,Web等相关的工作。2011年开始进入游戏开发领域,主持并移植了Cocos2d-x-for-XNA项目。喜欢技术分享,发起并组织了北京快乐技术沙龙,多次作为讲师参与微软,CSDN,51CTO以及9RIA等组织的各类技术培训和讲座。参与了手游项目《天降》的开发,目前主要的兴趣方向是计算机图形学和游戏引擎架构,致力于用软件技术丰富游戏世界的表现及品质。
目录
第1章全新的Cocos2d—x3.01
1.1Cocos2d—x3.0的历史意义1
1.1.1回归C++风格2
1.1.2更灵活的渲染架构2
1.1.3更自由的发展2
1.2Cocos2d—x3.0的新特性3
1.2.1使用C++风格3
1.2.2跨平台的Label6
1.2.3新的渲染系统6
1.2.4统一的消息分发8
1.2.5物理引擎集成9
1.2.6新的数据结构10
1.2.7其他14
1.3Cocos2d—x引擎展望15
1.3.13D16
1.3.2CocosCodeIDE16
1.4本章小结17
第2章Cocos2d—x架构一瞥19
2.1Cocos2d—x引擎系统总览19
2.2Cocos2d—x内存管理机制21
2.2.1C++显式堆内存管理21
2.2.2C++11中的智能指针22
2.2.3为什么不使用智能指针23
2.2.4垃圾回收机制23
2.2.5Cocos2d—x内存管理机制24
2.2.6Cocos2d—x中的智能指针29
2.2.7怎样进行内存管理35
2.3UI树及运行时游戏对象35
2.3.1位置与变换35
2.3.2坐标系36
2.3.3UI树39
2.3.4UI元素与内存管理45
2.4应用程序架构46
2.4.1游戏生命周期46
2.4.2窗口尺寸48
2.4.3场景管理48
2.4.4游戏循环49
2.5实时更新游戏对象52
2.5.1帧率52
2.5.2Scheduler53
2.5.3时间线54
2.5.4逻辑更新优先级55
2.5.5性能问题56
2.6Cocos2d—x的主线程56
2.6.1在主线程中执行异步处理57
2.6.2纹理的异步加载58
2.6.3异步处理的单元测试60
2.7本章小结60
第3章OpenGLES2.0概览62
3.1图形处理器简介62
3.2什么是OpenGLES63
3.3OpenGLES2.0渲染管线64
3.3.1顶点数组65
3.3.2顶点着色器66
3.3.3图元装配66
3.3.4光栅化69
3.3.5片段着色器70
3.3.6片段测试70
3.4渲染管线中的并行计算71
3.5构建高性能的渲染引擎72
3.6帧缓冲73
3.7本章小结74
第4章全新的绘制系统76
4.1新绘制系统的特点76
4.2绘制系统概览77
4.3RenderCommand79
4.4RenderQueue80
4.5GroupCommand81
4.6Render84
4.6.1RenderCommand的排序84
4.6.2QuadCommand85
4.7元素的可见性87
4.8绘制的时机89
4.9示例:自定义RenderCommand91
4.10本章小结95
第5章纹理96
5.1光栅化96
5.1.1多重采样97
5.1.2纹理坐标98
5.2像素矩形99
5.2.1像素存储模式99
5.2.2纹理数据的传输99
5.2.3解包100
5.3客户端图像格式103
5.3.1纹理格式的对应关系104
5.3.2图像数据格式转换105
5.4纹理对象和加载纹理107
5.5纹理单元与多重纹理109
5.6纹理缩放110
5.6.1纹理缩小110
5.6.2纹理放大111
5.6.3在Cocos2d—x中设置过滤模式112
5.7多级纹理113
5.7.1多级纹理过滤模式113
5.7.2多级纹理的上传114
5.7.3多级纹理的生成115
5.8纹理压缩116
5.8.1压缩纹理的特点116
5.8.2压缩纹理的实现117
5.8.3在Cocos2d—x中使用压缩纹理118
5.8.4PVRTC和PVRTC2120
5.8.5ETC122
5.8.6针对不同设备使用不同的压缩纹理123
5.9纹理缓存管理123
5.9.1纹理的生命周期124
5.9.2用TextureCache来管理纹理125
5.9.3场景过渡中的资源管理127
5.9.4Android下的纹理恢复处理130
5.10纹理所占内存的计算131
5.11使用纹理最佳实践133
5.11.1硬件层面133
5.11.2程序层面133
5.11.3资源层面134
5.12本章小结135
第6章精灵137
6.1用Sprite绘制一个矩形区域137
6.1.1V3F_C4B_T2F_Quad结构体138
6.1.2使用QuadCommand进行绘制139
6.1.3将Sprite作为子元素140
6.2Sprite的绘制属性140
6.2.1颜色混合141
6.2.2颜色叠加144
6.3Alpha预乘148
6.4精灵表150
6.5精灵动画152
6.6批绘制还是自动批绘制154
6.6.1SpriteBatchNode154
6.6.2TextureAtlas156
6.6.3SpriteBatchNode的特点和限制157
6.7部分拉伸:九宫格157
6.8本章小结158
第7章OpenGLES着色语言161
7.1概览161
7.2基础类型162
7.2.1空类型163
7.2.2布尔类型163
7.2.3整型163
7.2.4浮点型163
7.2.5矢量164
7.2.6矩阵164
7.2.7采样器164
7.2.8结构体165
7.2.9数组165
7.3存储限定符166
7.3.1默认限定符167
7.3.2常量限定符167
7.3.3属性限定符167
7.3.4全局限定符168
7.3.5易变量限定符169
7.4构造器170
7.4.1标量的转换构造170
7.4.2矢量和矩阵构造器171
7.4.3结构体构造器172
7.5矢量的分量173
7.6矩阵的分量174
7.7结构体和成员174
7.8矢量和矩阵操作符175
7.9本章小结176
第8章OpenGLES着色程序177
8.1顶点和顶点数组177
8.1.1图元与顶点178
8.1.2顶点属性状态178
8.1.3顶点数组180
8.2顶点缓冲对象185
8.2.1顶点数组缓冲对象187
8.2.2索引数组缓冲对象188
8.2.3使用VAO缓存顶点数组状态190
8.3着色器程序192
8.3.1着色器程序字符串192
8.3.2着色器的加载和编译193
8.3.3着色器程序对象195
8.4Cocos2d—x着色器子系统196
8.4.1GLProgram与Node之间的关系197
8.4.2GLProgramState199
8.4.3着色器程序的使用过程202
8.4.4GLProgramState的管理204
8.4.5GLProgramState的限制205
8.5顶点着色器206
8.5.1输入参数206
8.5.2顶点坐标输出参数207
8.5.3易变量输出参数208
8.6片段着色器209
8.6.1输入参数210
8.6.2纹理采样210
8.6.3输出参数211
8.7着色器编辑工具211
8.8示例213
8.8.1使用ETC压缩纹理214
8.8.2动态设置着色器参数217
8.9着色器程序最佳实践220
8.10本章小结220
第9章帧缓冲223
9.1GroupCommand223
9.1.1使用GroupCommand的流程224
9.1.2GroupCommand的限制225
9.2帧缓冲226
9.2.1绑定和管理帧缓冲227
9.2.2将图像附加到帧缓冲228
9.2.3渲染缓冲对象228
9.2.4将Renderbuffer附加到帧缓冲230
9.2.5将Texture附加到帧缓冲230
9.2.6帧缓冲完成状态231
9.3RenderTexture234
9.3.1RenderTexture的初始化235
9.3.2RenderTexture的绘制238
9.3.3ReadPixels239
9.3.4RenderTexture的限制及用途240
9.4本章小结240
第10章片段操作242
10.1片段操作简述242
10.2逻辑缓冲区243
10.2.1位平面244
10.2.2按位计算245
10.3片段测试248
10.3.1模板测试248
10.3.2深度测试250
10.3.3模板测试的步骤251
10.3.4片段测试的用途252
10.4全缓冲区操作254
10.4.1控制缓冲区的更新254
10.4.2清理缓冲区254
10.5ClippingNode255
10.5.1ClippingNode的绘制流程255
10.5.2ClippingNode的模板测试分析256
10.6本章小结258
第11章多分辨率支持259
11.1概述259
11.2设计分辨率260
11.2.1缩放策略261
11.2.2调整元素位置262
11.2.3几个有用的变量263
11.2.4使用屏幕分辨率264
11.2.5视口设置264
11.2.6什么时候缩放了265
11.3资源分辨率267
11.3.1资源分辨率的设置267
11.3.2真实分辨率InPixels268
11.3.3什么时候缩放资源269
11.4本章小结270
第12章事件分发272
12.1概述272
12.1.1什么是事件272
12.1.2事件的工作机制272
12.1.3事件系统的特点273
12.2订阅者274
12.2.1事件类型275
12.2.2注册与管理订阅者276
12.3事件的分发278
12.3.1订阅者的排序280
12.3.2嵌套事件282
12.3.3在事件分发中修改订阅者282
12.3.4停止分发事件283
12.4事件与Node284
12.4.1暂停与恢复284
12.4.2删除订阅者285
12.5触摸事件285
12.5.1EventListenerTouchAllAtOnce286
12.5.2EventListenerTouchOneByOne286
12.5.3单点和多点触摸之间的关系288
12.5.4触摸点的位置判断288
12.5.5可见性与触摸事件289
12.6其他289
12.6.1其他操作系统事件290
12.6.2EventCustom290
12.6.3内存管理290
12.6.4回调与返回值291
12.6.5单元测试291
12.6.6其他事件291
12.7本章小结292
第13章字体的故事293
13.1计算机字体的历史293
13.2轮廓字形概述294
13.2.1点295
13.2.2轮廓295
13.2.3轮廓的方向296
13.2.4轮廓的交叉296
13.2.5混合轮廓字形296
13.2.6字形格子297
13.3FreeType字体引擎297
13.3.1字体文件及字形索引298
13.3.2字符度量298
13.3.3FreeType字形解析过程299
13.3.4FreeType字形装载301
13.4FontAtlas304
13.4.1Font305
13.4.2FontAtlasCache308
13.5Label309
13.5.1通用属性310
13.5.2Font字符集312
13.5.3轮廓字体的缩放312
13.5.4特效316
13.6使用字体的最佳实践319
第14章动画系统321
14.1概述321
14.2线性插值323
14.2.1标量插值323
14.2.2矢量插值323
14.2.3变换矩阵插值324
14.2.4插值在动画系统中的运用324
14.3给元素添加动画326
14.3.1Action是一个自描述的对象326
14.3.2在Node上执行动画327
14.3.3控制动画的动画329
14.4动画系统架构331
14.4.1Speed333
14.4.2缓动函数333
14.4.3自定义动画——精灵闪白334
14.5本章小结337
第15章碰撞及物理引擎339
15.1物理引擎概述339
15.2碰撞检测系统340
15.2.1刚体340
15.2.2接触和碰撞343
15.2.3碰撞查询348
15.3刚体动力学349
15.3.1控制刚体的运动349
15.3.2碰撞响应350
15.3.3约束351
15.4整合物理引擎352
15.4.1刚体与可视对象352
15.4.2物理世界355
15.4.3游戏循环阶段357
15.5预处理与工具357
15.6本章小结358
第16章运行时游戏对象模型360
16.1概述360
16.2运行时游戏对象模型361
16.2.1以对象为中心的架构362
16.2.2组件模型364
16.2.3以属性为中心的架构367
16.3EntityComponentSystem369
16.3.1属性结构370
16.3.2分离数据与行为371
16.3.3数据驱动372
16.4对象查询与消息通信373
16.4.1根据唯一标识符查询374
16.4.2根据类型查询375
16.4.3面向类型编程375
16.4.4游戏对象数据库376
16.5实时更新游戏对象377
16.5.1更新的性能优化377
16.5.2更新的时序377
16.6本章小结379
第17章Genius—x开源框架381
17.1Genius—x是什么381
17.1.1Genius—x架构一览382
17.1.2Genius—x项目结构及使用384
17.2游戏对象模型385
17.2.1Entity385
17.2.2Component388
17.2.3System391
17.2.4ECSManager394
17.2.5数据驱动397
17.2.6NodeCom399
17.2.7对象的层级结构403
17.3数据格式、加载及串流403
17.3.1数据格式404
17.3.2文件加载和管理405
17.3.3游戏世界的串流406
17.4游戏通用系统407
17.5共享组件409
17.6示例409
第18章脚本411
18.1脚本的概念411
18.1.1脚本语言的特征412
18.1.2Lua脚本语言412
18.1.3脚本所需的架构413
18.2运行时脚本语言的功能415
18.2.1对原生编程语言的接口415
18.2.2游戏对象句柄416
18.2.3在脚本中接收及处理事件423
18.2.4发送事件427
18.2.5面向对象脚本语言427
18.3Luabindings430
18.3.1生成绑定代码430
18.3.2在程序中使用绑定代码431
18.3.3自定义绑定432
18.4在Lua中使用Genius—x433
18.4.1配置环境433
18.4.2创建Component脚本433
18.4.3创建System脚本434
18.4.4其他接口435
18.5本章小结435
参考文献437
本书评论