关于编程,c++语言.,第1张

关于 C++ 框架、库和资源的一些汇总列表,内容包括:标准库、Web应用框架、人工智能、数据库、处理、机器学习、日志、代码分析等。有需要的小伙伴可以收藏一下! C++标准库,包括了STL容器,算法和函数等。 C++ Standard Library:是一系列类和函数的集合,使用核心语言编写,也是C++ISO自身标准的一部分。 Standard Template Library:标准模板库 C POSIX library : POSIX系统的C标准库规范 ISO C++ Standards Committee :C++标准委员会

C++通用框架和库 Apache C++ Standard Library:是一系列算法,容器,迭代器和其他基本组件的集合 ASL :Adobe源代码库提供了同行的评审和可移植的C++源代码库。 Boost :大量通用C++库的集合。 BDE :来自于彭博资讯实验室的开发环境。 Cinder:提供专业品质创造性编码的开源开发社区。 Cxxomfort:轻量级的,只包含头文件的库,将C++ 11的一些新特性移植到C++03中。 Dlib:使用契约式编程和现代C++ 科技 设计的通用的跨平台的C++库。 EASTL :EA-STL公共部分 ffead-cpp :企业应用程序开发框架 Folly:由Facebook开发和使用的开源C++库 JUCE :包罗万象的C++类库,用于开发跨平台软件 libPhenom:用于构建高性能和高度可扩展性系统的事件框架。 LibSourcey :用于实时的视频流和高性能网络应用程序的C++11 evented IO LibU : C语言写的多平台工具库 Loki :C++库的设计,包括常见的设计模式和习语的实现。 MiLi :只含头文件的小型C++库 openFrameworks :开发C++工具包,用于创意性编码。 Qt :跨平台的应用程序和用户界面框架 Reason :跨平台的框架,使开发者能够更容易地使用Java,Net和Python,同时也满足了他们对C++性能和优势的需求。 ROOT :具备所有功能的一系列面向对象的框架,能够非常高效地处理和分析大量的数据,为欧洲原子能研究机构所用。 STLport:是STL具有代表性的版本 STXXL:用于额外的大型数据集的标准模板库。 Ultimate++ :C++跨平台快速应用程序开发框架 Windows Template Library:用于开发Windows应用程序和UI组件的C++库 Yomm11 :C++11的开放multi-methods

btsk : 游戏 行为树启动器工具 Evolving Objects:基于模板的,ANSI C++演化计算库,能够帮助你非常快速地编写出自己的随机优化算法。 Neu:C++11框架,编程语言集,用于创建人工智能应用程序的多用途软件系统。

BoostAsio:用于网络和底层I/O编程的跨平台的C++库。 libev :功能齐全,高性能的时间循环,轻微地仿效libevent,但是不再像libevent一样有局限性,也修复了它的一些bug。 libevent :事件通知库 libuv :跨平台异步I/O。

音频,声音,音乐,数字化音乐库 FMOD :易于使用的跨平台的音频引擎和音频内容的 游戏 创作工具。 Maximilian :C++音频和音乐数字信号处理库 OpenAL :开源音频库—跨平台的音频API Opus:一个完全开放的,免版税的,高度通用的音频编解码器 Speex:免费编解码器,为Opus所废弃 Tonic: C++易用和高效的音频合成 Vorbis: Ogg Vorbis是一种完全开放的,非专有的,免版税的通用压缩音频格式。

生物信息,基因组学和生物技术 libsequence:用于表示和分析群体遗传学数据的C++库。 SeqAn:专注于生物数据序列分析的算法和数据结构。 Vcflib :用于解析和处理VCF文件的C++库 Wham:直接把联想测试应用到BAM文件的基因结构变异。

压缩和归档库 bzip2:一个完全免费,免费专利和高质量的数据压缩 doboz:能够快速解压缩的压缩库 PhysicsFS:对各种归档提供抽象访问的库,主要用于视频 游戏 ,设计灵感部分来自于Quake3的文件子系统。 KArchive:用于创建,读写和操作文件档案(例如zip和 tar)的库,它通过QIODevice的一系列子类,使用gzip格式,提供了透明的压缩和解压缩的数据。 LZ4 :非常快速的压缩算法 LZHAM :无损压缩数据库,压缩比率跟LZMA接近,但是解压缩速度却要快得多。 LZMA :7z格式默认和通用的压缩方法。 LZMAT :及其快速的实时无损数据压缩库 miniz:单一的C源文件,紧缩/膨胀压缩库,使用zlib兼容API,ZIP归档读写,PNG写方式。 Minizip:Zlib最新bug修复,支持PKWARE磁盘跨越,AES加密和IO缓冲。 Snappy :快速压缩和解压缩 ZLib :非常紧凑的数据流压缩库 ZZIPlib:提供ZIP归档的读权限。

并发执行和多线程 BoostCompute :用于OpenCL的C++GPU计算库 Bolt :针对GPU进行优化的C++模板库 C++React :用于C++11的反应性编程库 Intel TBB :Intel线程构件块 Libclsph:基于OpenCL的GPU加速SPH流体仿真库 OpenCL :并行编程的异构系统的开放标准 OpenMP:OpenMP API Thrust :类似于C++标准模板库的并行算法库 HPX :用于任何规模的并行和分布式应用程序的通用C++运行时系统 VexCL :用于OpenCL/CUDA 的C++向量表达式模板库。

C++ B-tree :基于B树数据结构,实现命令内存容器的模板库 Hashmaps: C++中开放寻址哈希表算法的实现

Bcrypt :一个跨平台的文件加密工具,加密文件可以移植到所有可支持的操作系统和处理器中。 BeeCrypt: Botan: C++加密库 Crypto++:一个有关加密方案的免费的C++库 GnuPG: OpenPGP标准的完整实现 GnuTLS :实现了SSL,TLS和DTLS协议的安全通信库 Libgcrypt libmcrypt LibreSSL:免费的SSL/TLS协议,属于2014 OpenSSL的一个分支 LibTomCrypt:一个非常全面的,模块化的,可移植的加密工具 libsodium:基于NaCI的加密库,固执己见,容易使用 Nettle 底层的加密库 OpenSSL : 一个强大的,商用的,功能齐全的,开放源代码的加密库。 Tiny AES128 in C :用C实现的一个小巧,可移植的实现了AES128ESB的加密算法

数据库,SQL服务器,ODBC驱动程序和工具 hiberlite :用于Sqlite3的C++对象关系映射 Hiredis: 用于Redis数据库的很简单的C客户端库 LevelDB: 快速键值存储库 LMDB:符合数据库四大基本元素的嵌入键值存储 MySQL++:封装了MySql的C API的C++ 包装器 RocksDB:来自Facebook的嵌入键值的快速存储 SQLite:一个完全嵌入式的,功能齐全的关系数据库,只有几百KB,可以正确包含到你的项目中。

调试库, 内存和资源泄露检测,单元测试 BoostTest:Boost测试库 Catch:一个很 时尚 的,C++原生的框架,只包含头文件,用于单元测试,测试驱动开发和行为驱动开发。 CppUnit:由JUnit移植过来的C++测试框架 CTest:CMake测试驱动程序 googletest:谷歌C++测试框架 ig-debugheap:用于跟踪内存错误的多平台调试堆 libtap:用C语言编写测试 MemTrack —用于C++跟踪内存分配 microprofile- 跨平台的网络试图分析器 minUnit :使用C写的迷你单元测试框架,只使用了两个宏 Remotery:用于web视图的单一C文件分析器 UnitTest++:轻量级的C++单元测试框架

Cocos2d-x :一个跨平台框架,用于构建2D 游戏 ,互动图书,演示和其他图形应用程序。 Grit :社区项目,用于构建一个免费的 游戏 引擎,实现开放的世界3D 游戏 。 Irrlicht :C++语言编写的开源高性能的实时#D引擎 Polycode:C++实现的用于创建 游戏 的开源框架(与Lua绑定)。

CEGUI : 很灵活的跨平台GUI库 FLTK :快速,轻量级的跨平台的C++GUI工具包。 GTK+: 用于创建图形用户界面的跨平台工具包 gtkmm :用于受欢迎的GUI库GTK+的官方C++接口。 imgui:拥有最小依赖关系的立即模式图形用户界面 libRocket :libRocket 是一个C++ HTML/CSS 游戏 接口中间件 MyGUI :快速,灵活,简单的GUI Ncurses:终端用户界面 QCustomPlot :没有更多依赖关系的Qt绘图控件 Qwt :用户与技术应用的Qt 控件 QwtPlot3D :功能丰富的基于Qt/OpenGL的C++编程库,本质上提供了一群3D控件 OtterUI :OtterUI 是用于嵌入式系统和互动 娱乐 软件的用户界面开发解决方案 PDCurses 包含源代码和预编译库的公共图形函数库 wxWidgets C++库,允许开发人员使用一个代码库可以为widows, Mac OS X,Linux和其他平台创建应用程序

bgfx:跨平台的渲染库 Cairo:支持多种输出设备的2D图形库 Horde3D 一个小型的3D渲染和动画引擎 magnum C++11和OpenGL 2D/3D 图形引擎 Ogre 3D 用C++编写的一个面向场景,实时,灵活的3D渲染引擎(并非 游戏 引擎) OpenSceneGraph 具有高性能的开源3D图形工具包 Panda3D 用于3D渲染和 游戏 开发的框架,用Python和C++编写。 Skia 用于绘制文字,图形和图像的完整的2D图形库 urho3d 跨平台的渲染和 游戏 引擎。

BoostGIL:通用图像库 CImg :用于图像处理的小型开源C++工具包 CxImage :用于加载,保存,显示和转换的图像处理和转换库,可以处理的格式包括 BMP, JPEG, GIF, PNG, TIFF, MNG, ICO, PCX, TGA, WMF, WBMP, JBG, J2K。 FreeImage :开源库,支持现在多媒体应用所需的通用格式和其他格式。 GDCM:Grassroots DICOM 库 ITK:跨平台的开源图像分析系统 Magick++:ImageMagick程序的C++接口 MagickWnd:ImageMagick程序的C++接口 OpenCV : 开源计算机视觉类库 tesseract-ocr:OCR引擎 VIGRA :用于图像分析通用C++计算机视觉库 VTK :用于3D计算机图形学,图像处理和可视化的开源免费软件系统。 最后, 对于学习编程或者在工作想升职的程序员兄弟,如果你想更好的提升你的编程能力帮助你提升水平! 笔者这里或许可以帮到你~ 编程学习书籍分享: 编程学习视频分享: 分享(源码、项目实战视频、项目笔记,基础入门教程) 欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

剥离设计和玩法,让我们从技术的角度解析这个问题。

多人游戏的规模,一直是个让人捉摸不透的问题。从MUD发展而来的MMORPG,同时在线人数超过五位数的并不少见,但到了《方舟:生存进化》《ATLAS》和"吃鸡类"的作品中,服务器、或者说一个房间容纳的人数一般在70到200之间徘徊。

估计有不少玩家曾经幻想过,将《荒野大镖客:救赎2》这样细致入微的单人体验塑造成大型MMO,上万名牛仔在西部世界里快意恩仇、何其壮观。但即使是技术力如此之强的Rockstar,也只敢采取"32人战局"的设计方式,并在删减了一些内容的情况下推出《荒野大镖客Online》。

有时候,扩充多人游戏规模的瓶颈,还不单单只是愿不愿意花钱买服务器的问题。抛开设计、玩法上的考虑,许多开发团队面临着"想做大却没法做大"的技术窘境。《绝地求生》跟《堡垒之夜》将人数设置在100,也未必全是讨个好彩头。你要说蓝洞和Epic想要致敬高见广春的小说《大逃杀》,那应该也是构思42人相互厮杀的世界。

巧的是,今年我在CJ逛展时结识了田桑。他过去曾在EA负责线上游戏的功能设计,后来又任职英礴(Improbable)的游戏解决方案工程师,跟进过5个MMO项目,十分了解多人在线游戏的构造。我们从"吃鸡"的人数聊到《荒野大镖客:救赎2》的多人模式,于是就有了这篇科普。

为什么MMORPG能支持上万人

线上多人游戏的规模能到今天这个程度,肯定不是一蹴而就的。1996年的MUD《侠客行》最早是在大学里设置的服务器,当玩家规模增长到1000人同时在线时,其负载瞬间就被推到了极限。

同时期图形化的网游显得更加"寒碜",由于网络游戏的用户存在多个状态,如果说文字MUD仅仅是用一句话来描述,那图形化的状态可能要涉及到位置、动作、频率等诸多因素,每秒钟得同步非常多次,导致数据的容量特别大。因此号称领先于时代的《子午线59》,一个服务器能够容纳的人数也只不过250人。

当然,那个年代《子午线59》的同屏人数已经足够震撼了

《网络创世纪》的制作团队当时没少为用户规模这事操心,在Alpha测试的时候他们就觉得250人离"大型多人互动"的概念还有些距离,于是Beta测试前是又是买硬件又是研究新技术。到了1997年,这群人在BUG一堆的情况下硬是把能够同时容纳的并发人数怼到3000,导致后来不少漏洞被玩家利用。

在田桑看来,因为90年代是个快速发展的时代,他理解的早期用户规模扩容偏向堆带宽和硬件。只不过现在成本的越来越高,采取这种方法的代价太大,一个侧面现象就是CPU的主频很多年来没有太大提升。而从技术的角度来说,传统MMORPG使用的架构是C/S(服务器-客户机),作为一个被应用了10多年的架构,广泛存在于《Runescape》《魔兽世界》等作品的设计中,它可以说是网络游戏支持上万人同时在线的基础。

从名字就能看出来,C/S最早是两层结构,客户机也就是玩家电脑(主机)负责渲染,服务器处理游戏逻辑。后来又加了一层"数据库",搭载了用于保存游戏结果的存储器,估计也不用做太多科普。

一个典型的C/S架构交互

为了保证用户的规模足够大,传统MMORPG在"保真度"上做了很多牺牲。所谓的保真度可以简单理解成游戏的细致程度,包括物理模拟,比如撞墙之后产生反作用力,或是像《半条命2》那样实打实的把罐子握在手里捡起来;也包括延迟和同步,比如动作游戏和FPS游戏对服务器帧率都有非常高的要求。

根据田桑的解释,传统C/S的客户端不做模拟,或者是比较轻量的模拟,它们把这些状态以比较低的频率发到服务器,对服务器的负载要求较低,因此就可以允许更多的玩家同时在线。

《黑色沙漠》在MMORPG里的保真度算是不错,但相比单人游戏还是差了一截

保真度的差异,我们甚至能从单机游戏和MMO的渲染逻辑中看出来。单机游戏的图像会尽可能从GPU中加载,理想状态下最好能做到不访问硬盘和主存。《超级马力欧兄弟》每个关卡中的方块、每个怪物出现的位置都是固定的,角色、敌人和场景在游戏启动时就渲染读取完毕,进而放到GPU内存中。

而MMO中更多引入了"其它玩家"的变量,加上其技能、特效、位置的无数种组合,基本无法提前确定要渲染的东西,因此只能动态的从主存和硬盘读取纹理等数据。客户端与服务器的交互最先只确定玩家位置,本地先进行轮廓渲染,再在保持帧率的前提下一点点把画面读出来,体验肯定要差一些。

突然冒出来这么多人,在线多人游戏的图像具有不可预测性

事实上,在牺牲了保真度的前提下,要保证用户的规模够大,尽可能降低服务器负载,C/S架构仍然需要写一个极其复杂的后端。从《魔兽世界》的处理方式不难看出,那个年代暴雪工程师的天赋何其之高。

最常见的就是"空间分割法",即把游戏中的地理(地图)进行分割,逐一分配给不同的服务器进程或者设备。

空间分割法

一个变种是"空间复制法",即把世界复制很多份,每份单独塞到一个服务器;而为了解决玩家因刷宝、挑战高难度怪物而大量聚集起来的问题,他们又研究出"实例法",单以副本的方式为每波玩家提供极其有限的地区。

空间复制法

因此在田桑的眼中,基于C/S的MMORPG有着相当高的技术门槛:

"市场喜好抛开不说。MMORPG的技术门槛就要比DS高。UE的DS我个人觉得就是一个非常棒的产品,像做《方舟:生存进化》的,还有其它很多工作室,他们没有多少后端积累,就可以把游戏做到那个量级。"

而这里提到的DS(DedicatedServer,专用服务器),不仅是当下很多主流在线多人游戏都会使用的技术,也恰好能够解答"为什么「吃鸡」的玩家得是100人"的问题(当然DS和C/S不是同一类概念)。

为什么一局吃鸡的玩家得是100人

首先得声明100人只是个数量级,并非锱铢必究的数字。

简单来说,DS可以比喻成"房间制"。好比《绝地求生》《堡垒之夜》《战地5》和《我的世界》,一个服务器(独立主机)对应一个房间,然后这个房间大致能够容纳两位数到三位数的玩家。

目前市面上主流的游戏引擎,如虚幻和Unity为线上多人游戏提供的解决方案都是DS。这是一种能最大限度提高网游保真度的架构,它最早的目的就是为了解决FPS的同步问题,追求高精度、低延迟,涵盖客户端预测、服务器校验,延迟补偿等多种技术。

《GTA5》的战局也是一个DS

田桑拿虚幻引擎举了个例子:"DS结构下,引擎是带到服务器上运行的,客户端渲染相关的部分被剥离出来了,运行的是物理、AI等纯逻辑。由于服务器能运行物理计算,所以联网游戏可以做到物理的同步,就可以实现很真实的游戏体验。"

在虚幻引擎的DS下,服务器便承担了计算碰撞同步的任务,例如判定武器有没有命中,环境爆炸产生的碎片轨迹这些东西。而且角色的AI行为树同步也依赖DS,所以服务器会高频率地处理状态,负载非常大。这导致DS架构虽然有着支持高保真度游戏的优点,同样也具备高消耗、低承载的缺点。

一个典型例子是《光环5》的战区模式。这个用到DS架构的模式,支持的最大玩家数是24人,而且对于AI、载体和目标的数量都有相应限制,原因正是要确保不会超过服务器的承载量。为此开发团队简化了AI逻辑,因此在战区模式下NPC会显得比战役中的要"蠢"。

如果延续C/S架构下的扩容思路,玩家们可能会感到困惑——一台服务器负载太高,你加几台服务器不就完事了么?

然而,DS架构在这一点上还受限于游戏引擎:

"虚幻引擎的主要逻辑是单线程运行,如果把服务器的主频性能,比如从16核变成32核,能够负载的人数其实是不能增加的。而且就算从一台机器增加到两台机器,可容纳的玩家数量也不会变化,因为有一个技术架构的限制至于增加核心数有没有用,这个还要看引擎本身是否支持多线程扩展。"

Epic有一段时间为了《堡垒之夜》能支持100人共斗绞尽脑汁,对虚幻引擎做了不少优化。比如在跳伞降落的过程中,主动降低远程调用所需要的带宽;又比如限制客户端向服务器发送移动更新的频率,避免因为客户端帧率过高,最终导致服务器过度负载。

Epic曾提到过一个观点,既然一家公司都要做大型MMO了,那肯定有自己独特的要求和后端解决方案,依样画葫芦地照搬他们的DS不太适合,虚幻本身去研究扩容的事情可能会比较鸡肋,鼓励开发者基于这项技术自己想办法。

而主要逻辑是单线程运行的Unity,其实或多或少也和虚幻引擎一样需要面临同样的问题。

做个几万人的《荒野大镖客》有没有可能

从上面两个部分的论述来看,不难发现如今线上多人游戏面临一个两难的局面。要么就沿用传统C/S,自己写后端,以降低保真度为代价追求规模;要么就拿DS架构办事,缩小规模,提高保真度。

但有没有办法将它们融合起来呢?其实很多开发团队都在思考这个问题。

市面上有着这样特性的产品不多,"褒贬不一"的海盗冒险多人游戏《ATLAS》勉强算一个。抛开产品品质的问题,《ATLAS》用的就是DS架构,而且"理论上"支持40000名玩家同时游玩。

《ATLAS》

他们的做法,是在DS外自己写了世界服务器和数据服务器的后端。先把多个DS实例给拼起来,再由世界服务器统一负责管理——比如只要玩家过地图,就把玩家的数据搬到另一台服务器。其实可以类比成《魔兽世界》的"空间分割法",当然明显能够看出技术不怎么成熟,Steam上负面评价最多的地方就是"卡"和"连不上"。

英礴本来也打算打造一个庞大的、高保真度的游戏世界,结果发现技术方面都是坑。于是干脆先把DS的问题捋清,降低日后游戏制作的门槛和风险,因此催生出了一个解决方案(工具):SpatialOS。

SpatialOS是一个基于底层公有云资源的游戏开发环境。它一方面会给你提供云端的服务器托管,一方面给予技术支持,类似于一个多功能插件。这个工具可以很简单的接入虚幻和Unity引擎,甚至任何其他第三方引擎,它主要提供在DS架构下扩充多人游戏规模的手段。

其中一个扩容思路和《ATLAS》有点像,如果一个DS不够用,就把多个DS拼接起来统一管控。因为SpatialOS虚幻开发套件的方向就是走多进程,这样更容易利用多核甚至多机器的计算资源,可以突破传统DS的限制——简而言之就是给游戏加服务器有用了。

上面这段话有点绕,直接看"把DS拼起来"的示例图更加直观。下图中9个方块代表9个DS,每个游戏服务器的管辖区域分别由不同颜色代表,玩家不仅可以无缝跨越服务器边界,也能和不同区域的其它玩家互动。

据田桑解释,这背后的秘密是9个DS之上有一个"网络层",它才真正负责所有游戏状态的管理。一个DS是一个区,通过这个管理层将所有区弥合起来。客户端连到这个管理层,而不是所有的DS之上。

利用多个游戏服务器来模拟游戏世界的不同区域

说到分层这个概念,SpatialOS中还有项名为"AI负载拆分"的功能,正好能解决前文《光环5》战区模式的问题。理论是,如果把AI的负载扔到另一个服务器,那不就为玩家扩容腾出空间了吗,而且还不必让NPC变"蠢",可谓一举两得。

这种方法可以采取的应用很广,对延迟要求不高,和核心系统(如物理)耦合度不高的东西都可以拆分出来,比如天气系统。分出来的层,则基于云放到另一台虚拟机上。

英礴本身做了一些实验,使用原生虚幻引擎的情况下,在已有100名玩家的基础上最多可以运行229个AI;而将AI负载扔到另一个服务器后,维持相同服务器帧率的前提下AI数量可以达到479个,相当于扩容了一倍。

目前正在测试的冒险生存游戏《拾荒者》(Scavengers),刚好就采用了AI负载拆分的技术。开发商MidwinterEntertainment表示玩家会在游戏中遭遇极端天气、怪物肆虐,外来入侵者以及敌对玩家团队等各方面的威胁。而AI负载拆分使得他们在3x3公里的地图内,一方面保证了这些高保真度的体验,一方面又实现了"60名玩家+300个AI"的规模。

当然,尽管分层看起来很牛逼,但银弹却是不存在的,田桑举了个例子:

"假设A1区域有10000人,负载不下了。那要么把A1切成A1和A2,分别放5000人,也可能是在A1上面再加一层,这都是开发者自己去控制的。但是这个事情会带来成本,因为两个区间之间有大量通信,要靠服务器硬件来堆。

比如一个服务器要从1000人扩容到3000人,那就分三层如果每层额外带来的性能损耗是50%,每一层实际只能跑500人,三层只有1500人。那你又得多分几层,这时候的损耗可能又不止50%了。"

所以,要想在DS架构下把玩家的规模扩大,得综合多种方法。SpatialOS实际上还有一套名为QBI的系统,可以自定义降低同步频率,解决一些网络负载的问题。比如其中一个表现就是令距离玩家较近的活动物体看起来更顺畅,越远"越卡",主要是看开发者如何发挥想象。

正如之前提到的技术限制,MMORPG人数规模很大,可以达到几千上万人,但基本集中在社交、打怪,或者是副本的交互方式,很少见到有真实的物理模拟。另外一个方向是像《堡垒之夜》《方舟:生存进化》这样的游戏,它们有些地方做得很细致,但人数又容易碰到瓶颈,通常就是房间制的。

由此引申到能不能做"容纳几万人的《荒野大镖客:救赎2》"的问题,田桑认为理论上是可行的,只是还没有开发者触及到这根线。而且即使解决了技术问题后,话题就又回到了无法回避的开发风险和成本。

不过,未来这两种需求应该会交汇到一起,使得线上多人游戏在现今的标准上再进一步:一方面能支持更多玩家,一方面又能保证更真实的模拟。至少有人目前正在朝着这个方向努力,或许再过不久,有着高保真度的大型多人在线游戏就不再仅仅停留在幻想中。

在国内外,业界盛传有十大开源游戏引擎,分别是OGRE、Irrlicht、Panda3D、CrystalSpace、jME、BlenderGameEngine、RealityFactory、TheNebulaDevice2、RealmForge、OpenScene-Graph。我们对这十款开源游戏引擎深入进行分析。

(1)OGRE是面向对象图形渲染引擎(Object-OrientedGraphicsRenderingEngine)的缩写,采用C++开发,以MIT许可证发布,可以在Windows、Linux、Mac上运行。OGRE自己也说明本身不是游戏引擎。

其主要特征如下:

面向对象,插件扩展架构,具有文档支持。

支持脚本。可以通过脚本管理材质资产并进行多路渲染。

支持物理碰撞检测。

支持顶点灯光、像素灯光、灯光映射。

支持阴影映射、三维阴影。

支持多纹理、凹凸贴图、多重材质贴图、立体投影。

支持顶点、像素、高级着色。

支持场景管理,具有多种数据结构。

支持逆向运动动画、骨架动画、变形动画、混合动画及姿态动画。

支持网格加载、皮肤、渐进网格。

支持环境映射、镜头眩光、公告牌、粒子、运动模糊、天空、水、雾、丝带轨迹、透明对象。

支持XML文件转换。

引擎特性全面(),稳定性好(),支持全面(),不容易上手和使用()。

(2)Irrlicht采用C++开发,以zlib/libpng许可证发布,可以在Windows、Linux、Mac、Solaris、FreeBSD、Xbox上运行。Irrlicht自己也说明本身不是游戏引擎。

其主要特征如下:

面向对象,插件扩展架构,具有文档支持。

支持内建场景、灯光、GUI编辑器。

支持物理碰撞检测。

支持顶点灯光、像素灯光、灯光映射。

支持阴影映射、三维阴影、模板缓冲区阴影。

支持多纹理、凹凸贴图、多重材质贴图、立体投影。

支持顶点、像素、高级着色。

支持场景管理,具有多种数据结构,允许无缝集成室内及室外场景。

支持骨架动画、变形动画及混合动画。

支持网格加载。

支持环境映射、公告牌、粒子、天空、水、雾。

支持地形渲染。

引擎特性全面(),稳定性好(),支持全面(),容易上手和使用()。

(3)Panda3D采用C++和Python开发,以BSD许可证发布,可以在Windows、Linux、Mac、SunOS上使用。Panda3D是一个完整的游戏引擎。

其主要特征如下:

面向对象,脚本扩展架构,具有文档支持。

支持内建场景、粒子、关卡编辑器。

支持物理碰撞检测,可以用于运动物体。

支持顶点灯光、像素灯光、灯光映射。

支持阴影映射、三维阴影、模板缓冲区阴影。

支持多纹理、凹凸贴图、多重材质贴图、立体投影。

支持顶点、像素、高级着色。

支持场景管理,具有多种数据结构。

支持骨架动画。

支持网格加载及皮肤。

支持环境映射、公告牌、粒子、雾、火。

支持地形渲染。

支持“客户端/服务器”网络模式。

支持2D、3D和流音效。

支持有限状态机、人工智能。

引擎特性全面(),稳定性很好(),支持很全面(),很容易上手和使用()。

(4)CrystalSpace采用C++开发,以LGPL许可证发布,可以在Windows、Linux、Mac上使用。CrystalSpace是一个完整的游戏引擎。

其主要特征如下:

面向对象,组件扩展架构,具有文档支持。

支持内建场景、灯光、GUI编辑器。

支持物理碰撞检测,可以用于运动物体。

支持顶点灯光、灯光映射。

支持阴影映射、三维阴影。

支持多纹理、多重材质贴图。

支持顶点、像素着色。

支持场景管理,具有多种数据结构。

支持骨架动画、帧动画、变形动画。

支持网格加载、渐进网格。

支持环境映射、镜头眩光、公告牌、粒子、天空、镜像。

支持地形渲染。

支持2D、3D音效。

支持游戏世界管理。

通过有限状态机、行为树、神经网络、遗传算法支持人工智能。

引擎特性很全面(),稳定性好(),支持很全面(),不容易上手和使用()。

(5)jME是jMonkeyEngine的缩写,采用Java开发,以BSD许可证发布,可以在Windows、Linux、Mac上使用。JME的目标是提供一个Java语言3D游戏引擎,但业界目前也有人认为jME还不是一个游戏引擎。

其主要特征如下:

面向对象,插件扩展架构,具有文档支持。

支持内建游戏世界编辑器。

支持物理碰撞检测。

支持顶点灯光、灯光映射。

支持三维阴影。

支持多纹理、多重材质贴图。

支持顶点、像素、高级着色。

支持场景管理,具有多种数据结构。

支持骨架动画、帧动画。

支持网格加载及皮肤。

支持环境映射、镜头眩光、公告牌、粒子、天空、水、火、爆炸、雾。

支持地形渲染。

支持3D音效。

引擎特性全面(),稳定性好(),支持很全面(),容易上手和使用()。

(6)Blender游戏引擎是采用C++和Python开发,以GPL许可证发布,可以在Windows、Linux、Mac、Solaris、FreeBSD、Irix上使用。Blender是一个完整的游戏引擎。

其主要特征如下:

面向对象,插件及脚本扩展架构,具有文档支持。

支持内建工作流、GUI、数据库、角色等编辑器。

支持物理碰撞检测,可以用于运动物体。

支持顶点灯光、像素灯光。

支持阴影映射。

支持多纹理、凹凸贴图。

支持顶点、像素着色。

支持场景管理,具有多种数据结构。

支持逆向运动动画、帧动画。

支持网格加载及皮肤。

支持环境映射、粒子、天空、水、雾。

支持地形渲染。

支持“客户端/服务器”网络模式。

支持2D及3D音效。

通过脚本方式支持人工智能。

引擎特性基本全面(),稳定性基本不错(),支持全面(),不容易上手和使用()。

(7)RealityFactory是采用C++开发,以MIT许可证发布,可以在Windows上使用。RealityFactory自称游戏无需编程。

其主要特征如下:

面向对象,脚本扩展架构,具有文档支持。

支持内建几何形体编辑器。

支持物理碰撞检测。

支持顶点灯光、像素灯光、辐射灯光、三维灯光。

支持阴影映射。

支持多纹理、凹凸贴图、多重材质贴图、投影。

支持顶点、像素着色。

支持场景管理,具有多种数据结构。

支持骨架动画、帧动画及混合动画。

支持网格加载及皮肤。

支持环境映射、公告牌、粒子、天空、水、火、爆炸、雾、贴花、天气、镜像。

支持地形渲染。

支持“客户端/服务器”网络模式。

支持3D及流音效。

通过路径查找、决策及脚本方式支持人工智能。

引擎特性基本全面(),稳定性基本不错(),支持基本全面(),容易上手和使用()。

(8)TheNebulaDevice2是采用C++开发,以MIT许可证发布,可以在Windows、Linux上使用。NebulaDevice是一个完整的游戏引擎。

其主要特征如下:

面向对象,插件及脚本扩展架构,具有文档支持。

支持内建几何形体编辑器。

支持物理碰撞检测。

支持顶点灯光、像素灯光、灯光映射、光泽映射。

支持阴影映射。

支持多纹理、凹凸贴图、多重材质贴图、投影。

支持顶点、像素、高级着色。

支持场景管理,具有多种数据结构。

支持骨架动画、帧动画、变形动画及混合动画。

支持网格加载及皮肤。

支持环境映射、镜头眩光、公告牌、粒子、天空。

支持地形渲染。

支持“客户端/服务器”、P2P网络模式。

支持2D、3D及流音效。

通过脚本方式支持人工智能。

引擎特性全面(),稳定性好(),支持基本全面(),不容易上手和使用()。

(9)RealmForge是采用C#在OGRE上开发,以LGPL许可证发布,可以在Windows、Linux、Mac、Solaris、HP/UX、FreeBSD上使用。RealmForge是一个完整的游戏引擎,现在已经转入商业化运作。

其主要特征如下:

面向对象,插件及脚本扩展架构,具有文档支持。

支持内建游戏编辑器。

支持物理碰撞检测,可以用于运动物体。

支持顶点灯光、像素灯光、灯光映射。

支持阴影映射、投影面、立体投影。

支持多纹理、凹凸贴图、多重材质贴图、投影。

支持顶点、像素、高级着色。

支持场景管理,具有多种数据结构。

支持骨架动画、帧动画、面部动画及混合动画。

支持网格加载、皮肤及渐进网格。

支持环境映射、镜头眩光、公告牌、粒子、天空、水、火、爆炸、贴花、雾、天气、镜像。

支持地形渲染。

支持“客户端/服务器”、P2P网络、主控服务器模式。

支持3D及流音效。

通过路径查找、决策、优先状态机、脚本、神经网络等方式支持人工智能。

引擎特性全面(),稳定性基本不错(),支持基本全面(),不容易上手和使用()。

(10)OpenSceneGraph是采用C++开发,以LGPL许可证发布,可以在Windows、Linux、Mac、Solaris、SunOS、FreeBSD、Irix、Playstation上使用。OpenSceneGraph是一个完整的游戏引擎。

其主要特征如下:

面向对象,插件及脚本扩展架构,具有文档支持。

支持内建场景编辑器。

支持物理碰撞检测。

支持顶点灯光、各向异性灯光。

支持投影面、立体投影。

支持多纹理、多重材质贴图、投影。

支持顶点、像素、高级着色。

支持场景管理,具有多种数据结构。

支持骨架动画、帧动画及混合动画。

支持网格加载及皮肤。

支持环境映射、公告牌、粒子、镜像。

支持地形渲染。

支持“客户端/服务器”、P2P网络、主控服务器模式。

支持2D、3D及流音效。

引擎特性全面(),稳定性好(),支持还可以(),上手和使用比较难()。

一般说来,选择开源游戏引擎一定需要获取源码、好的文档及开放式支持。稳定性对于商业化运作是一个双刃剑,利于产品的开发运营,但需要有效引入新的游戏技术革新。引擎涵盖特性是一个积累过程,可以不断添加和改进。上手和使用性也反映了设计开发游戏引擎的团队的内在价值取向——以技术为主,还是以应用为主。

游戏开发商都希望研制、运营一个万众瞩目的游戏产品,但是,使用按照不同许可证发布的游戏引擎开发的游戏产品需要遵循相应的知识产权法规。因此,游戏引擎的软件许可证成为选择时的一个极其重要的考虑因素。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 关于编程,c++语言.

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情