我所理解的Cocos2d-x

我所理解的Cocos2d-x(完全基于Cocos2d-x3.0,深度剖析计算机图形学,OpenGL ES及游戏引擎架构,全面提升游戏开发相关知识)

秦春林 著  

ISBN 978-7-121-24625-8

2014年11月出版

定价:79.00元

404页

16开

内容提要

《我所理解的Cocos2d-x》针对最新的 Cocos2d-x3.x版本,介绍了Coco2d-x游戏引擎的基本架构、渲染机制,以及各个子模块的功能和原理,并结合OpenGL ES图形渲染管线,深入探讨了游戏开发中涉及的相关图形学的知识,内容包括:Cocos2d-x的基本架构及渲染机制、纹理相关的知识、OpenGL ES 2.0渲染管线、计算机字体的绘制、多分辨率支持、事件分发、碰撞与物理引擎、游戏对象模型架构、Genius-x开源框架、脚本在游戏引擎中的架构等。《我所理解的Cocos2d-x》偏重讲解每个知识模块的概念及原理,使读者能够透过现象看到其背后的工作机制,所以本书在内容组织上并不是围绕Cocos2d-x的接口使用来展开,而是按照通用游戏引擎架构及图形学的内容进行组织。

《我所理解的Cocos2d-x》面向中、高级开发者,可作为初级开发者进阶的教程,也可作为高校游戏引擎架构及图形学相关专业的参考教材。

目录

第1章  全新的Cocos2d-x 3.0  1

1.1  Cocos2d-x 3.0的历史意义     1

1.1.1  回归C++风格     2

1.1.2  更灵活的渲染架构     2

1.1.3  更自由的发展     2

1.2  Cocos2d-x 3.0的新特性     3

1.2.1  使用C++风格     3

1.2.2  跨平台的Label 6

1.2.3  新的渲染系统     6

1.2.4  统一的消息分发     8

1.2.5  物理引擎集成     9

1.2.6  新的数据结构     10

1.2.7  其他     14

1.3  Cocos2d-x引擎展望     15

1.3.1  3D   16

1.3.2  Cocos Code IDE  16

1.4  本章小结     17

第2章  Cocos2d-x架构一瞥     19

2.1  Cocos2d-x引擎系统总览     19

2.2  Cocos2d-x内存管理机制     21

2.2.1  C++显式堆内存管理     21

2.2.2  C++ 11中的智能指针     22

2.2.3  为什么不使用智能指针     23

2.2.4  垃圾回收机制     23

2.2.5  Cocos2d-x内存管理机制     24

2.2.6  Cocos2d-x中的智能指针     29

2.2.7  怎样进行内存管理     35

2.3  UI树及运行时游戏对象     35

2.3.1  位置与变换     35

2.3.2  坐标系     36

2.3.3  UI树     39

2.3.4  UI元素与内存管理     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.2  Scheduler  53

2.5.3  时间线     54

2.5.4  逻辑更新优先级     55

2.5.5  性能问题     56

2.6  Cocos2d-x的主线程     56

2.6.1  在主线程中执行异步处理     57

2.6.2  纹理的异步加载     58

2.6.3  异步处理的单元测试     60

2.7  本章小结     60

第3章  OpenGL ES 2.0概览     62

3.1  图形处理器简介     62

3.2  什么是OpenGL ES  63

3.3  OpenGL ES 2.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.3  RenderCommand  79

4.4  RenderQueue  80

4.5  GroupCommand  81

4.6  Render  84

4.6.1  RenderCommand的排序     84

4.6.2  QuadCommand  85

4.7  元素的可见性     87

4.8  绘制的时机     89

4.9  示例:自定义RenderCommand  91

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.4  PVRTC和PVRTC2  120

5.8.5  ETC   122

5.8.6  针对不同设备使用不同的压缩纹理     123

5.9  纹理缓存管理     123

5.9.1  纹理的生命周期     124

5.9.2  用TextureCache来管理纹理     125

5.9.3  场景过渡中的资源管理     127

5.9.4  Android下的纹理恢复处理     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.1  V3F_C4B_T2F_Quad结构体     138

6.1.2  使用QuadCommand进行绘制     139

6.1.3  将Sprite作为子元素     140

6.2  Sprite的绘制属性     140

6.2.1  颜色混合     141

6.2.2  颜色叠加     144

6.3  Alpha预乘     148

6.4  精灵表     150

6.5  精灵动画     152

6.6  批绘制还是自动批绘制     154

6.6.1  SpriteBatchNode  154

6.6.2  TextureAtlas  156

6.6.3  SpriteBatchNode的特点和限制     157

6.7  部分拉伸:九宫格     157

6.8  本章小结     158

第7章  OpenGL ES着色语言     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章  OpenGL ES着色程序     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.4  Cocos2d-x着色器子系统     196

8.4.1  GLProgram与Node之间的关系     197

8.4.2  GLProgramState  199

8.4.3  着色器程序的使用过程     202

8.4.4  GLProgramState的管理     204

8.4.5  GLProgramState的限制     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.1  GroupCommand  223

9.1.1  使用GroupCommand的流程     224

9.1.2  GroupCommand的限制     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.3  RenderTexture  234

9.3.1  RenderTexture的初始化     235

9.3.2  RenderTexture的绘制     238

9.3.3  ReadPixels  239

9.3.4  RenderTexture的限制及用途     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.5  ClippingNode  255

10.5.1  ClippingNode的绘制流程     255

10.5.2  ClippingNode的模板测试分析     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  真实分辨率InPixels  268

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  事件与Node  284

12.4.1  暂停与恢复     284

12.4.2  删除订阅者     285

12.5  触摸事件     285

12.5.1  EventListenerTouchAllAtOnce  286

12.5.2 EventListenerTouchOneByOne  286

12.5.3  单点和多点触摸之间的关系     288

12.5.4  触摸点的位置判断     288

12.5.5  可见性与触摸事件     289

12.6  其他     289

12.6.1  其他操作系统事件     290

12.6.2  EventCustom    290

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.3  FreeType字体引擎     297

13.3.1  字体文件及字形索引     298

13.3.2  字符度量     298

13.3.3  FreeType字形解析过程     299

13.3.4  FreeType字形装载     301

13.4  FontAtlas  304

13.4.1  Font  305

13.4.2  FontAtlasCache  308

13.5  Label 309

13.5.1  通用属性     310

13.5.2  Font字符集     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.1  Action是一个自描述的对象     326

14.3.2  在Node上执行动画     327

14.3.3  控制动画的动画     329

14.4  动画系统架构     331

14.4.1  Speed  333

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.3  Entity Component System    369

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.1  Genius-x是什么     381

17.1.1  Genius-x架构一览     382

17.1.2  Genius-x项目结构及使用     384

17.2  游戏对象模型     385

17.2.1  Entity  385

17.2.2  Component  388

17.2.3  System    391

17.2.4  ECSManager  394

17.2.5  数据驱动     397

17.2.6  NodeCom    399

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.2  Lua脚本语言     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.3  Lua bindings  430

18.3.1  生成绑定代码     430

18.3.2  在程序中使用绑定代码     431

18.3.3  自定义绑定     432

18.4  在Lua中使用Genius-x  433

18.4.1  配置环境     433

18.4.2  创建Component脚本     433

18.4.3  创建System脚本     434

18.4.4  其他接口     435

18.5  本章小结     435

精彩节摘

第16章  运行时游戏对象模型

 

到目前为止,我们讨论的所有内容都可以称之为低阶引擎系统,例如Renderer如何将网格绘制到屏幕上,纹理如何被使用,字体如何被绘制,如何从人体学接口设备获取玩家输入信息,如何处理物体的碰撞,以及如何对物体执行动画等。这些几乎都是和游戏性无关的一些基础功能。

当开始设计游戏的时候,开发者面对的往往是一个更上层的,可以称之为游戏性(Gameplay)基础系统的高阶引擎系统,例如怎样表示游戏中的对象,怎样组织它们的行为和状态,设计师怎样通过数据驱动来快速修改关卡及游戏配置,怎样高效有序地组织游戏对象之间的逻辑更新等。这些笔者称之为游戏性架构(Gameplay Architecture),或者很多开发者称之为游戏架构。理论上,游戏性架构的一些理论和实践甚至可以和游戏引擎无关。

当然,游戏性架构其实涉及很多内容,例如它可以包括运行时游戏对象模型、关卡及串流、实时更新游戏对象模型、事件分发及脚本系统等。本章将会聚焦于运行时游戏对象模型,讲述常见的几种游戏对象设计的概念、方式及优缺点。

16.1  概述

在所有游戏性架构相关的内容中,运行时游戏对象模型可能是最复杂的系统,并且不同的游戏引擎呈现出的差异极大。例如Unity3D提供的组件模型,虚幻引擎提供的面向对象继承的模型,其他一些游戏例如《末日危城(Dungeon Siege)》则使用一种不同于两者的基于数据驱动的游戏对象模型。

这些不同的游戏对象模型之间呈现出很大的设计思维及使用上的差异,但是它们往往都提供或者必须具备一些通用的功能,这些包括但不限于:

(1)管理游戏对象的创建及销毁。游戏中经常会动态创建各种游戏对象,例如一个塔防游戏会定时出现一些小怪物,子弹在撞击到目标时立即被销毁等。许多游戏引擎都提供一种统一的动态创建、销毁游戏对象的方式,并管理游戏对象的内存及资源,例如第17章即将讲述的Genius-x框架中使用createEntity()、removeEntity(entity)来动态创建和销毁一个游戏对象。但是在Cocos2d-x中却不是通过统一的方式创建和销毁游戏对象,它使用每个Node子类自己的构造函数来创建,并使用一种特殊的方式管理内存(参见第2章)。

(2)联系底层游戏引擎。每个游戏对象要能够通过某种方式访问底层的游戏引擎系统,例如能够渲染三角形网格、执行碰撞检测,对角色执行动画等。在Unity3D引擎中,每个游戏对象(GameObject)可以通过添加一个与底层引擎功能相关的组件(Componment)来访问底层引擎系统。Cocos2d-x的Node类则直接集成了物理模拟、动画、实时逻辑更新等接口。

(3)实时模拟对象行为。游戏是一个高度实时的系统,游戏对象的状态、行为在每一帧都可能会随着时间发生变化,这需要一套高效的游戏对象更新机制。对象可能需要以特定的逻辑次序进行更新。此外,除了逻辑次序,游戏对象之间还可能存在依赖关系,需要按照一定的次序更新(关于游戏对象更新的次序会在本章后面讲述)。

(4)定义新游戏对象类型。在开发过程中,随着游戏需求的改变和演进,游戏对象模型必须有足够的弹性,可以容易地加入新的对象类型。理想情况下,新的游戏类型应可以完全用数据驱动的方式定义,但是在实际情况中,大部分新增游戏类型都需要程序员的参与。在Genius-x框架中,新的不同行为的组合类型可以通过修改数据文件来实现,而新的行为则可以通过脚本来实现,然后修改数据文件来添加新的行为。

(5)唯一的对象标识符。游戏世界可能会包含成百上千的游戏对象,在运行时必须能够识别和找到想要的对象,这意味着每种对象需要有某种唯一标识符。例如在Cocos2d-x 中可以通过给一个Node指定一个字符串名称,然后通过字符串标识符查找一个游戏对象。

(6)游戏对象查询。除了上面按游戏唯一标识符查询游戏对象,游戏性系统还需要一些更高级的查询方式,例如找到某种类型的游戏对象,或者某个范围的敌人等。在面向组件或者属性的架构中,游戏对象是以组件/属性为单位存储的,很容易查找具有某个属性类型的游戏对象组合,并且这种查找游戏对象的方式对数据驱动更友好,笔者称之为面向类型编程。

除了上述提到的这些,运行时游戏对象模型还包括有限状态机,用于同一个网络内的对象复制、对象序列化和持久性存档等。

作者简介

秦春林:自大学开始自学编程,先后从事过工作流软件,云计算,Web等相关的工作。2011年开始进入游戏开发领域,主持并移植了Cocos2d-x-for-XNA项目。喜欢技术分享,发起并组织了北京快乐技术沙龙,多次作为讲师参与微软,优快云,51CTO以及9RIA等组织的各类技术培训和讲座。参与了手游项目《天降》的开发,目前主要的兴趣方向是计算机图形学和游戏引擎架构,致力于用软件技术丰富游戏世界的表现及品质。

媒体评论

2014年,对于Cocos2d-x可以说是具有里程碑意义的一年:3.x大版本更新、向3D领域正式进军、北大/浙大等重点高校开课、与ARM/微软/Intel巨头深入合作、在日本等市场实现后进者逆袭……引擎团队的不懈努力得到了丰厚的回报。

Cocos2d-x 3.0版本的这一次飞跃主要实现了三大优化:一是新的渲染器,可创建渲染队列,可简单地实现批量渲染,跨平台也非常容易;二是新修改过的API,将语言用法改为C++程序员更习惯的使用方式,稳定性与可读性得到提升;三是性能再次提升优化,利用自动裁剪、自动批处理技术,性能得到很大提升,兼容性方面在中国安卓平台上也做到非常好用。

在版本跟进方面,秦春林的速度是最快的。现在你看到的这本《我所理解的Cocos2d-x》是国内第一本直接从Cocos2d-x3.0版本入手的书籍,直接从更高的起点起步,可以说是国内最新。

本书由浅入深,共分18个章节,从Cocos2d-x 3.0及架构开始,逐块剖析引擎的各个特性,同时搭配OpenGL ES的相关使用。在最后一章,秦春林还介绍了他自己基于组件架构模型写的开源框架,可以说是一本很好的Cocos2d-x高阶书籍,值得一读。

另外,秦春林的团队“魂世界”采用Cocos2d-x开发的作品《天降》在今年也取得了非常好的成绩,已被乐逗游戏以2000万元的高价代理,是一款很酷的电竞手游。我本人非常期待,希望这款Cocos2d-x游戏能够取得更好的成绩。

最后,祝秦春林的书本大卖、游戏火爆,也祝更多的团队能够从Cocos引擎中受益。

 

Cocos2d-x游戏引擎作者

王哲

前言

我与Cocos2d-x结缘于2011年,那个时候我所在的公司OpenXLive与Cocos2d-x团队合作移植Cocos2d-x游戏引擎到WP7平台,它采用C#语言基于XNA来实现,我是该项目的负责人。然而不久,微软就用支持C++原生语言的WP8替代了WP7,该项目也逐渐被开发者淡忘。没想到三年后我却会为Cocos2d-x写一本书,这三年,我和Cocos2d-x都在成长。

开源是我认为软件最富魅力的部分,它给予我们阅读和修改源代码的自由。开源对人类和科技进步的贡献是巨大的,如今,大多数软件系统都有着各种各样开源软件的影子。开源代码对技术人员的成长有着难以估量的价值,例如,没有开源的Cocos2d-x,我就难以写出本书中的很多内容。

本书定位为一本进阶的书籍,它着重于讲述Cocos2d-x引擎各个功能及组件背后的实现原理。因此,本书并没有严格按照Cocos2d-x引擎本身的功能展开描述,而是从这些功能中抽象出一些设计或者架构层面的内容进行讨论。例如本书没有分别讲述精灵、地图、粒子特效等的接口使用,而是从纹理、渲染方式等多个方面来讲述这些元素背后的工作机制;而OpenGL ES、物理引擎和脚本等内容也几乎是可以脱离于Cocos2d-x进行学习和理解的。

这就是本书标题的来源,也是本书与同类书籍在内容编排上的最大不同。我希望写一本书,它可以让读者站在一个系统性的高度对游戏引擎的一些架构设计及实现进行理解,从而不但提升和扩充自己的知识结构,更能够在实际开发中去灵活解决各个层面的技术问题。本书同时追求系统性和实践性的平衡,例如对于纹理部分,除了总结纹理相关的所有知识,也通过一些示例来演示它在各个层面的具体使用。

本书共分18章。

第1~4章介绍了Cocos2d-x引擎的基本架构及新的绘制系统。这部分内容包括:Cocos2d-x的内存管理机制,UI树的遍历及结构,应用程序的生命周期,游戏循环的各个阶段,以及在Cocos2d-x中驱动各个子系统进行逻辑更新的机制和工作原理。这部分也介绍了Cocos2d-x 3.x新的数据结构,并详细描述了新的渲染系统。总之,在这一部分,读者可以对Cocos2d-x的基本架构有比较系统的了解。

 

第5~10章围绕OpenGL ES图形渲染管线进行介绍。这部分从纹理讲起,详细讲述了纹理的存储格式、传输、缩放、压缩及多重纹理等相关知识;第8章详细讲述了顶点数组的结构、顶点属性的绑定及传输、着色器程序的编译及链接,以及Cocos2d-x新的着色器子系统,并举例在Cocos2d-x中使用着色器的流程和怎样使用多重纹理。这部分也对顶点着色器和片段着色器两个阶段在图形渲染管线中的作用进行了详细描述。

第9、10章讲述了OpenGL ES图形渲染管线的最后两个阶段:帧缓冲和片段操作,并以Cocos2d-x中对这两个阶段的应用RenderTexture和ClippingNode为例进行讲解。这样,读者将对整个渲染管线的每一个阶段都能有所了解,并且能够结合Cocos2d-x中的使用去思考每一个阶段的意义和作用,从而对图形渲染管线有更深刻的了解。这也是本书最具特色的部分。

第10~15章讲述了Cocos2d-x的一些子系统,包括事件分发、多分辨率支持、动画系统及物理引擎整合。其中物理引擎部分也是我比较喜欢的章节,这部分讲述了一些通用的物理引擎的架构及其使用,以及怎样和游戏引擎进行整合。

第16~18章探讨应该怎样去设计和管理游戏世界中的对象。第16章讲述了常见的对象模型、组件模型、属性模型之间的概念、区别及优缺点;第17章则以属性模型为例,讲述了一个游戏对象模型应该怎样设计;第18章探讨了时下最流行的脚本相关的内容,但是与仅仅讨论脚本使用不同的是,我们站在一个游戏引擎的高度去讨论脚本的架构,这样读者甚至能设计自己的脚本模型。这一部分内容具有对前端架构设计的高度总结性与实践性,不管是对经验丰富的读者还是初学者,相信都具有一定的启发性。

另外,本书在写作之初并没有构建出整本书的内容结构,在写前面的章节时我甚至不知道最后几章的内容和结构会是怎样的。在开始写每一章的时候,我不会首先去给自己描绘一个目录结构,而是首先把所有相关的内容列出来,如果之中有我不熟悉的内容,或者有Cocos2d-x以外的一些知识,我则会首先停下写作去把这些内容整理出来。例如关于ECS部分的内容就是基于Cocos2d-x社区的一些讨论,我花了很多时间去学习和理解。当最后所有相关的内容整理为一个列表时,我就知道该怎么去写作这部分的内容。因此,在这本书的目录结构中,读者找不到任何同类书籍类似的内容结构,因为这完全是基于个人的理解及知识结构体系去写作的一本书。

所以,对我而言这本书还有一个有意义的目标,我希望透过这样的方式去探讨一种系统性的学习方法。当你开始学习某个知识点时,不要把自己限定在该知识点处,而是首先从该知识点进行适当的扩展,列出该知识点相关的所有内容,再逐个深入学习和研究细节,最后反过来整理该知识点的结构体系。这样不仅能够更深入地学习该知识点,还能够延伸知识的广度,所以本书有大量超出Cocos2d-x以外的内容,这些内容又是与Cocos2d-x紧密相关的。希望读者在阅读过程中能够感受到这样一种写作风格和方法。

本书是一本进阶类书籍,阅读本书,你需要对Cocos2d-x和C++有基本的了解。如果你是一名新手,可以首先阅读同类书籍中相对比较入门的书籍,否则本书的一些章节可能会给你造成一定的困惑。

学习知识最好的方法永远是多读几遍,书中关于OpenGL ES和游戏对象模型部分的内容可能需要多读几次才能更加深入地理解相关的概念。当然,如果你在阅读过程中遇到什么障碍,随时可以通过电子邮件或者我的博客等多种方式和我进行探讨。

本书可以作为Cocos2d-x开发学习的书籍,也可以作为单独的OpenGLES相关的教材,游戏对象模型部分的内容也可以作为设计游戏引擎架构的参考资料。本书也可以作为高校游戏及图形学相关专业的参考教程。

最后,由于个人经验有限、思维有限,书中难免会出现一些错误和疏漏。真诚地希望读者可以将这些错误的地方反馈给出版社,我们会及时地列出勘误,以帮助更多的读者更好地学习。

 

秦春林

2014年7月25日

 

相关推荐

涵盖从Java 5到Java 11所有重要特性,让Java学习不再难!

曾经,网络上流传着这样一套视频,无数学员通过这套视频学会了Java,进入了软件开发领域~~这套视频就是“Java无难事”。如今,为了方便大家更好地学习,也跟上当前Java发展更新的步伐,作者基于之前的视频内容,做了更新和完善,在广度和深度上进行了扩展,并继承“让Java学习再也不是难事”的思想,推出了新书《Java无难事》。—— 从Java5到Java11 ——Java,这门编程语言界的常青树,凭借着简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 ,深受程

博文视点(北京)官方博客 5039

离开大厂为什么会“返贫”?比《逆行人生》更真实~~

近期热播的电影《逆行人生》讲述了曾经的互联网大厂中层高志垒,因意气用事成为了“家里蹲”,却没想到人生从此“开入逆行道”的故事!电影播出后陷入巨大争议,不少人认为这部电影在消费苦难,刻意把一个人的生活拍得那么无辜、受害~~一个高设定的中产家庭真的能落魄到这种地步吗?抛开电影中主角的具体经历,在现实中,确实有不少离开大厂“返贫”的怪现象!那么,大厂“返贫”到底有哪些不为人知的底层逻辑呢?《大厂之外》作者刘飞老师就此采访了互联网行业的“老炮儿”、见证过很多离开大厂盲目折腾的真实案例的沈浩翔老师,让我们一

博文视点(北京)官方博客 1273

首部顶级AI科学家创作的纯正科幻小说,一个元宇宙和AI时代的全新科学幻想!

自2023 年起,深度学习和大模型的浪潮,终于超脱学院里形而上的争论,展示了它大规模改变现实世界的可能性,而改变的方式,可能和我们的想象完全不同。在这个新的时代中,每个个体的“独一无二”不再是与生俱来的,而是需要把握先机,以极大的勇气去开辟的。当平静的生活被诡谲的彗星所打破,当艰难的抉择关系到人类的命运,当虚拟世界成为最后的避风港,在无解的阳谋之下,顶尖的头脑们如何破局?在此背景下,很多事情都会发生变化,人的价值体系和价值评判方式,人和人之间的互动模式,人和人之间的相互关系,都将产生巨大的改变。

博文视点(北京)官方博客 1375

如何构建一个大模型?看完你就知道了!

第 7 章和第 8 章围绕大语言模型的应用和评估开展介绍,包括将大语言模型与外部工具和知 识源进行连接的 LangChain 框架、大语言模型在智能代理及多模态大模型等方面的研究和应用情 况,以及传统的语言模型评估方式、针对大语言模型使用的各类评估方法。例如:提示词:复旦大学有几个校区?强化学习(Reinforcement Learning,RL)阶段根据数十万用户给出的提示词,利用前一阶段训练的奖励模型,给出 SFT 模型对用户提示词补全结果的质量评估,并与语言模型建模目标综合得到更好的效果。

博文视点(北京)官方博客 2052

爆火的无人驾驶萝卜快跑,背后有哪些隐忧?

就在不久前的上海世界人工智能大会上,澳大利亚科学院院士、新南威尔士大学教授托比·沃尔什,在出席“人工智能新进展与社会科学的未来”论坛时指出,要深入研究人工智能发展给人类带来的影响,尤其是在就业方面,并不是所有工作人工智能都做得比人类好,在谋划未来、创意工作和提供情绪价值等方面,人类具有不可取代的优势。不得不说,现在的人工智能技术,特别是那些超大的智能模型,简直就是坐上了火箭,嗖嗖地往前冲,对经济、社会还有咱们的日常生活,影响大得不得了!人工智能的发展必然会带来生产力的提升,对劳动力的替代也是必然的。

博文视点(北京)官方博客 2029

人类警惕!AI是个大骗子!

幸运的是,医学界拒绝了辛顿的建议,继续培训新的放射科医生。我认为,如果你是一名放射科医生,你就像那只已经跑到悬崖边缘的郊狼,因为还没有往下看,所以它没有意识到脚下已经没有路了。书中从图灵的梦想开始,谈到人机共存的未来,娓娓道来,深刻且生动有趣。从关于人工智能中的“人工”这一讨论中,我们可以得出一个最终结论,那就是在人类智能中的“人”可能是我们与我们正在制造的能力越来越强的人工制品的机器之间最重要的区别。我对那些人,尤其是从事人工智能和道德规范工作的员工表示同情, 他们似乎受到了不成比例的影响。

博文视点(北京)官方博客 1466

大模型时代的基础架构,大模型算力中心建设指南重磅来袭!

在这个例子中,成本为100元的T恤是最畅销商品,成本为80元的T恤是高毛利商品,它们的区别在于前者内在的原料价值创造了最畅销商品,带来了更高的性价比,而后者外在的思想价值创造了高毛利商品。这类商品不会有很强的需求和很大的销售量,但毛利率很高。在最畅销商品和高毛利商品的“挡拆”战术中,一旦客户与最畅销商品发生接触,就是高毛利商品赚取利润的最佳时机,因为客户会将二者进行比较。最畅销商品和高毛利商品并不是两类单独的商品,即新奇商品、流行商品、基本商品和专业化商品中的任何一个都同时包含最畅销商品和高毛利商品。

博文视点(北京)官方博客 1374

程序员“计算机之子“的职场反思

Winter 是我认识的最有传奇性,也最有趣的程序员之一。他在前端工程师领域颇有知名度,是 JavaScript 专家,主要的作品是 Weex 框架。如果在搜索引擎中搜 Winter,会出来一个看似没头没脑的“计算机之子”的称呼。这是因为他的生日是 10 月 24 日,正好是“程序员节”(1024 是 2 的 10 次方)。Winter 从小就用机器码编程了,那个年代还是用打孔纸的。从哈尔滨工程大学毕业后,他加入微软亚洲研究院,后来加入过 “人才辈出”的盛大创新院,又在 2012 年加入了阿里巴巴,职

博文视点(北京)官方博客 1961

红队实战宝典之内网渗透测试

本书是以内网攻防中红队的视角编写的,从内网的基础攻击原理出发,讲解红队的攻击思路和主流渗透测试工具的使用方法,旨在帮助安全行业从业人员建立和完善技术知识体系,掌握完整的后渗透流程和攻击手段。由于本书的编写初衷是为具有一定基础的渗透测试工程师和红队人员梳理常用技巧,所以,本书主要通过命令和工具介绍各种内网渗透测试方法,同时分析了一部分工具的工作原理。一场真实的、有目的的网络攻击,通常包括对业务的控制、修改和对数据的获取等,而对业务的攻击,一般都是通过本书介绍的方法拿到权限后展开的。

博文视点(北京)官方博客 1802

端午节,来看看这本应景的“龙舟书”吧!

如果你曾经尝试过使用AI工具,但是始终没有找到能够助力自己工作生活的地方,或者只停留于简单的问答,于是就慢慢放下了,那么这本书或许可以帮你看见使用AI工具的真正魅力,让你掌握ChatGPT的高阶玩法,看到它的更多应用场景,真正让它成为为自己赋能的AI助手!比如第四章的编程提效部分,或许你会用AI生成片段代码,但通过龙舟书的案例,你会了解到如何用AI实现一个模块、甚至实现项目级开发的操作逻辑和具体方法。在23年3月,我们也成立了自己的AI社群"AI俱乐部",也是在这个时期,我们全公司都加入了AI赛道!

博文视点(北京)官方博客 1065

100倍增长的背后:华为IPD实施20年

不仅有严谨的理论和方法阐述,更大量剖析了经典商业公司产品的成功案例,阐述了他们成功的背后逻辑是如何反应了IPD的本质,同时也基于大家司空见惯的日常商业案例进行了分析,让读者更容易理解IPD关于产品的业务本质和商业经营的核心。华为坚持IPD变革20多年,不仅构建了产品研发领域的世界级竞争力、更是开启了从此持续变革的序幕,培养了一大批熟知变革方法的干部队伍和企业文化,让华为尝到了变革的甜头,从此华为就开始不断革自己的命、直到今天也未有停止过。华为创始人任正非说过:华为没有成功、只有成长和对常识的遵守。

博文视点(北京)官方博客 1528

被众多AI大佬看好的具身智能到底是什么?它凭什么成为下一个AI浪潮?

通过比较智能体和具身智能,我们不仅能够更好地理解具身智能的独特性和价值,而且看到了一个全新的视角:智能是如何通过与环境的互动来发展和适应的。具身智能理论让我们想起人类自身的特性,我们的智能不仅来源于大脑的思维过程,还深深根植于我们的身体及我们与外部世界的交互。具身智能的核心观点是,认知和智能行为是大脑、身体、环境相互作用的结果,体现了智能体通过物理互动来学习和适应环境的能力。感知与交互:智能体的感知和交互很有规律,而具身智能喜欢与环境实时互动,它的感知和行为是在不断变化的环境中进行的。

博文视点(北京)官方博客 2516

数字经济 + 人工智能最大的商业机会不是在互联网上……

因为,今天中国农业已经不仅仅涉及单一的种养殖的事情了,还涉及农业组织、土壤问题、种业研发、种植技术、植保技术、采收技术、品控技术、深加工、营销及IP 打造、全渠道运营、物流供应链、文化赋能、一二三产融合、产业资本、政策配套等,同时还涉及农村产业结构、返乡创业、农民老龄化、新农人培养、产业转型升级等。(2) 家庭农场带动的一二三产融合模式 :城市周边的乡村,是很难实现规模化的农业的,如果单靠第一产业,很难支撑农业的发展,稳定种地农民的心,要一二三产融合发展,才能在同一片土地上,实现不同商业模式的收益。

博文视点(北京)官方博客 1447

亿级流量下通用的高并发架构设计

Proxy收到业务服务的数据库操作请求后,根据请求中的SQL语句进行归类,将属于写操作的请求(如insert/delete/update语句)转发到数据库Master,将属于读操作的请求(如select语句)转发到数据库任意一个Slave,完成读/写分离的路由。数据库承受的高并发请求压力,主要来自读请求。我们可以把数据库按照读/写请求分成专门负责处理写请求的数据库(写库)和专门负责处理读请求的数据库(读库),让所有的写请求都落到写库,写库将写请求处理后的最新数据同步到读库,所有的读请求都从读库中读取数据。

博文视点(北京)官方博客 1617

豆瓣8.7分,30000人都在阅读的量化用户体验实操书全面更新!

这些示例中的行为、态度和情感都是可以被度量的。来自不同专业和领域的关注如何提高用户体验的人将会从本书获益,包括可用性和用户体验专业人员、交互设计师、信息架构师、服务设计师、产品设计师、Web 设计师和开发人员、软件开发人员、平面设计师,以及市场营销和市场研究专业人员,还有项目和产品经理等。这本书适用于任何对改进不同类型产品或服务的用户体验感兴趣的人,无论这些产品是消费类产品、计算机系统、应用程序、网站、服务,还是其他任何类型的物品,只要是人使用的产品,就可以度量与使用该产品有关的用户体验。

博文视点(北京)官方博客 1249

一本书了解AI的下一个风口:AI Agent

随着技术的飞速发展,我们正站在一个新的转折点上,AI Agent(AI智能体,简称智能体)作为AI技术发展的新风口,正逐渐揭开神秘面纱,预示着一个全新的智能时代到来。它们将不再是被动的执行者,而是我们生活中的主动参与者,可以理解我们的语言,预测我们的需求,并在多个任务中提供个性化的帮助。智能体将不再是单一功能的应用程序,而是能够跨平台、跨任务的智能伙伴,可以根据我们的需求和偏好,提供更精准和更高效的帮助。我们需要制定相应的法律法规,确保智能体技术的发展在伦理和法律的框架内进行,并加强监管,保护用户的权益。

博文视点(北京)官方博客 1142

一本书精通推荐算法,轻松搞定入门、面试、进阶

精通推荐算法:核心模块+经典模型+代码详解》一书主要介绍推荐算法技术,覆盖召回、粗排、精排和重排等模块,目的是让读者熟悉推荐算法的全部链路,加深体系化理解,并掌握关键技术细节。它能帮助你掌握推荐算法的整体架构、每个核心模块的知识框架,以及一些工作必备的经典模型,同时,能帮助你深入理解它们的出发点和具体实现方案,在实际工作中融会贯通。同时,推荐系统链路很长,包括召回、粗排、精排和重排等诸多模块,如何掌握整体架构,并深入每个模块理解其细节,就成为一件困难且重要的事。(3)模型经典,代表性强。

博文视点(北京)官方博客 1310

一本书了解AI的下一个风口:AI Agent

随着技术的飞速发展,我们正站在一个新的转折点上,AI Agent(AI智能体,简称智能体)作为AI技术发展的新风口,正逐渐揭开神秘面纱,预示着一个全新的智能时代到来。它们将不再是被动的执行者,而是我们生活中的主动参与者,可以理解我们的语言,预测我们的需求,并在多个任务中提供个性化的帮助。智能体将不再是单一功能的应用程序,而是能够跨平台、跨任务的智能伙伴,可以根据我们的需求和偏好,提供更精准和更高效的帮助。我们需要制定相应的法律法规,确保智能体技术的发展在伦理和法律的框架内进行,并加强监管,保护用户的权益。

博文视点(北京)官方博客 1181

野心、梦想与科幻——浅谈外星殖民与软件工程

这本书完美融合价值和创新的软件架构选择,旨在让业务决策者和技术团队成员学会通过协作来清晰地理解自身在战略层面面临的问题,并确定理想的架构制定方法,无论该方法是分布式微服务、模块化良好的单体,还是介于两者之间的粗粒度服务。软件架构专家Vaughn Vernon和Tomasz Jaskuła展示了如何基于需求和目标做出平衡的架构决策,而非盲目跟风,从而聚焦于价值和创新,交付更具可演进性的系统,并避免代价高昂的错误。考虑到新的交付机制和收入模式,现有的产品可能是创新的催化剂,能够带来比昨天更大的价值。

博文视点(北京)官方博客 1688

万众期待,催更5年,《码农翻身2》强势来袭!!!

再比如,对于“编程语言的巅峰”这一节,如果你对基本的数组、条件分支、函数都不了解,就无法领略汇编语言的厉害之处。现在《码农翻身2》终于来了,之所以拖了这么长的时间,主要是因为中间“插播”了另外一本书——《半小时漫画计算机》,该书使用纯漫画的方式来讲解计算机基础知识,这对我来说是一个全新的尝试,花费了我不少的时间和精力。所以,我在写文章的时候也有意把枯燥乏味的技术包装一下,变成好玩有趣的故事,在故事中让主人公不断遇到问题,不断制造悬念,吸引大家看下去,不知不觉就把技术掌握了。

博文视点(北京)官方博客 1942

【干货来了】大语言模型训练优化秘籍

由于一次模型训练过程通常包含多轮,因此,初始数据预热占用的同步时间在整个训练过程中的占比很低,而且本地缓存不受节点数量增加的影响,可以保证每个节点具有同等的吞吐性能。这样做效率更高,性能可提升数倍。不同的分布式并行技术对通信带宽的要求不同,因此,针对不同的硬件环境,需要选择最适合的分布式并行方案,并针对不同的数据量和模型特点做针对性的优化,从而达到最好的通信效率。还有一些需要关注的 I/O 问题,如训练数据量比较大,通常有几 TB∼几百 TB,这对存储的要求比较高,既需要大存储容量,又需要高吞吐性能。

博文视点(北京)官方博客 1632

从《繁花》看图数据库的关联力!

据艾瑞咨询《2022年中国知识图谱行业研究报告》,知识图谱是二维链接的图结构而非行或列的表结构,需要以图数据的形式描述并存储,该方式能直接反映知识图谱的内部结构,有利于知识查询,并且结合图计算算法能够实现知识的深度挖掘与推理。在此背景下,图技术领域专家张晨博士基于近十多年来在图数据库技术领域的研究和实践经验,牵头编写了《图数据库:理论与实践》,为图技术爱好者提供一本即具备领域概括性、又具有专业深度、还兼顾了业务实操性的领域知识与实践手册。在市场上,尚未出现一本能够帮助图数据库爱好者从入门到精通的实践手册。

博文视点(北京)官方博客 1079

大模型的智慧之源:图技术的崛起

以创邻科技针对信用卡场景打造的智能问答平台为例,该平台通过图技术和通用大模型的协同工作,优化大模型框架的逻辑推理能力的同时拓展了其原始知识边界,让生成式回答的灵活开放性与精确性并存。在处理复杂的推理和问答任务,特别是涉及多个变量和条件的情况时,图技术可以将问题抽象为图结构,并利用图算法进行分析,有效解决复杂问题,弥补大型语言模型推理能力的不足,实现更广泛的应用和发展。与大模型相比,图技术能够更好地处理复杂的逻辑关系和多种数据结构,更全面地分析和理解数据之间的关系,提高推理和决策的准确性。

博文视点(北京)官方博客 767

Go 首次冲进前八!曾两次夺得年度编程语言,也曾跌至百名开外 | TIOBE 2 月榜单发布

本书基于Go 1.20版本编写,对Go语言的语法和使用方法进行了详尽的介绍,包括基础语法、数组、切片、映射、函数、类型、包与依赖管理、接口、反射、并发编程、泛型、测试、常用标准库和第三方库的基本原理和使用方法,并通过最佳实践案例详细讲解使用过程中遇到的常见问题和解决方法,以期帮助读者读者更好地理解Go语言的语法特性和应用技巧。想要用Go语言写出优质的软件,不仅要了解Go语言的语法,还需要对Go语言的特性、软件的通用编写方法、软件项目的组织方法、并发程序设计、软件测试、软件性能优化等方面都有一定的了解。

博文视点(北京)官方博客 1543

2024年了,是谁还在学C++11?(没错,是我)

它融合了令全球无数程序员为之迷醉的C++大师Stanley B. Lippman的丰富实践经验,注入了C++标准委员会原负责人Josée Lajoie 对C++标准的深入理解,再结合上C++ 先驱Barbara E. Moo在 C++教学方面的真知灼见,经历了语言缔造者与常青藤名校数版迭代,才锻造出了这样一本每一页都在闪闪发光的C++学习头牌!但无论如何,学习 C++11 仍然是一个有价值的投资,可以提升你的 C++编程技能,并为你在 C++领域的发展打下坚实的基础。

博文视点(北京)官方博客 1697

大模型竞速下半场,探索大模型应用的奥秘

虽然搭建Chatbot的产品方法论并没有因为以ChatGPT 为代表的大模型的出现发生本质的变化,但是在一些技术落地的实现路径中,新的技术对旧的技术确实有了一定程度的替换。只有冷静地看待人工智能的发展,理解技术周期性的变化并持续拥抱最新的技术,我们才能抓住真正的机会,做出人们期待的产品。与出版本书第1版时的情形非常相似,如今,大家对ChatGPT有和Chatbot一样巨大的误区,认为人工智能是一个纯粹的技术工程,被各种技术术语影响,忽略了商业应用中产品设计和对用户需求的理解实际上是更为重要的事实。

博文视点(北京)官方博客 1190

云联接:揭开SD-WAN神秘面纱,颠覆你对网络的认知!

如今,尽管 SD-WAN 技术在业内仍未有系统、标准的定义,但未来 WAN 传输将是软件定义的这一观点已成为业内共识:只有在应用识别能力、隧道加密能力、动态优化能力、应用可视化能力和零信任构架五大能力的支持下,一个具有商业化价值的 SD-WAN 基础服务架构体系才能形成。云联接,即世间万物中无处不在的联系、联接和联动,它是 SD-WAN 的形式化表述,包含了 SD-WAN 技术的丰富能力,是展现未来网络形态的理念。当然,不同行业的不同企业网络特性各有不同,SD-WAN的应用场景也可能大相径庭。

博文视点(北京)官方博客 856

RAG:让大语言模型拥有特定的专属知识

值得注意的是,在进行检索之前,对数据的处理也非常重要。可以发现,虽然大语言模型有上下文推理能力,但由于大语言模型存在“知识过期”和“细分领域的幻觉”这两个限制,且它会尽可能地尝试回答所有的问题,因此只是单纯地使用大语言模型是没有办法解决所有问题的,RAG正是在这个背景下应运而生的。RAG技术在Chatbot中的应用极大地提高了回应的相关性和准确性,使得处理复杂查询成为可能,并显著增强了个性化与上下文理解的能力,为用户提供了更丰富、更自然、更个性化的交互体验,推动了Chatbot技术的发展。

博文视点(北京)官方博客 2362

AI加持,openEuler打造数字基础设施全场景操作系统

通过在openEuler中引入的异构内核管理,可以在CPU和NPU通过共享页表的方式实现统一编址,使得双方可以互用内存,达成内存“透明”扩容、超分,这样可以提升推理场景吞吐量提升50%,并极大的简化内存管理的需求成本,以往多套内存接口简化为一套,异构驱动代码也能从万行下降到百行。通用的配置语言,也可以用于打造开箱即用的定制能力,支持任意YAML字段定制,适配众多格式的上游软件,而且OS支持分层定制,通过EulerMaker和EulerTest构建面向多场景的软件。“崛起数字时代,引领数智未来。

博文视点(北京)官方博客 1574

基于大语言模型LangChain框架:知识库问答系统实践

ChatGPT 所取得的巨大成功,使得越来越多的开发者希望利用 OpenAI 提供的 API 或私有化模型开发基于大语言模型的应用程序。然而,即使大语言模型的调用相对简单,仍需要完成大量的定制开发工作,包括 API 集成、交互逻辑、数据存储等。为了解决这个问题,从 2022 年开始,多家机构和个人陆续推出了大量开源项目,帮助开发者快速创建基于大语言模型的端到端应用程序或流程,其中较为著名的是 LangChain 框架。

博文视点(北京)官方博客 4716
上一篇: Qt on Android 核心编程
下一篇: 寻路大数据:海量数据与大规模分析
博文视点
博文视点 企业官方账号 企业官方账号 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄20年 6882粉丝 2132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值