【Visual C++】游戏开发笔记三十五 站在巨人的肩膀上:游戏引擎导论

本系列文章由zhmxy555(毛星云)编写,转载请注明出处。

文章链接: http://blog.csdn.net/zhmxy555/article/details/8250057

作者:毛星云(浅墨) 邮箱: happylifemxy@163.com

看到在留言中很多朋友提到不太清楚DirectX与游戏引擎的区别的问题,在这里浅墨就专门把自己对游戏引擎的一些理解写成一篇文章,作为我们《Visual C++游戏开发》专栏的游戏引擎导论,也希望能通过这篇文章,能让大家有所启发,对游戏引擎,对渲染流水线的概念有更深刻的认识。

文章首先分析了学习游戏引擎的必要性,然后介绍了游戏引擎的概念和相关知识,接着介绍了几款最具人气的开源游戏引擎,然后对市面上存在的所有游戏引擎进行了列举,并为所有列出的游戏引擎都给出了官方网站的链接。文章末尾回归了我们Direct3D的主题,为后续内容的讲解进行了铺垫。

一、学完DirectX,我们该干什么?

浅墨觉得,历代DirectX龙书的作者Frank Luna在龙书中忽视了非常重要的一方面内容的讲解,那就是就是学完了DirectX我们接着该做什么。

这大概是很多怀揣游戏开发梦想的热血青年们曾经思考过的问题。

浅墨也曾经在这问题上迷茫过,也因为没人指明前路而走了不少弯路。

不过后来在黑暗中不断地摸索,将荆棘变成坦途之后,终于摸索出了一条正确的道路。

也就是看完龙书《DIRECTX.9.0.3D游戏开发编程基础》之后,我们需要如何学习,来把学到的知识立体化,最终转化为开发游戏的实际能力。首先我们需要再看一本书,《Real-Time Rendering》,也就是(RTR)实时渲染技术,目前出到第三版了。(这本书并没有中文版,大家如果要走游戏开发的道路,读完龙书之后,剩下基本上都要靠读英文书了。)

学完龙书,也可以选择自己喜欢的游戏引擎来接触并掌握了。看完龙书后浅墨首推学习Irrlicht,然后进阶推荐Ogre。两者都是开源游戏引擎,都有着源代码提供下载学习,而且网上对这两种引擎的研究热情很高,资料丰富,引擎代码字里行间都是哲思,掌握其中的代码并纳为己用,自己写出像样的游戏demo来是不成任何问题的。

下面,就开始看看我们这篇文章的主角——游戏引擎

二、站在巨人的肩膀上:游戏引擎导论

1.游戏引擎的起源和意义

上帝说,要有光,于是,就有了光。

曾经有一段时期,游戏开发者关心的只是如何尽量多地开发出新的游戏并把它们推销给玩家。尽管那时的游戏大多简单粗糙,但每款游戏的平均开发周期也要达到8到10个月以上,这一方面是由于技术的原因,另一方面则是因为几乎每款游戏都要从头编写代码,造成了大量的重复劳动。渐渐地,一些有经验的开发者摸索出了一条偷懒的方法,他们借用上一款类似题材的游戏中的部分代码作为新游戏的基本框架,以节省开发时间和开发费用。根据马克思的生产力学说,单位产品的成本因生产力水平的提高而降低,自动化程度较高的手工业者最终将把那些生产力低下的手工业者淘汰出局,引擎的概念就是在这种机器化作业的背景下诞生的。

简而言之,因为想用更短的周期开发游戏,省掉重复编写代码的功夫,于是便有了游戏引擎。

首款的3D引擎诞生于1992年,3D Realms公司/Apogee公司发布了一款只有2兆多的小游戏——《德军司令部》(Wolfenstein 3D)。之后这款游戏引申为Wolfenstein 3D游戏引擎,这也是史上首款3D引擎,它的作者是大名鼎鼎的约翰·卡马克,这位id Software公司的首席程序师正是凭借这款Wolfenstein 3D引擎在游戏圈里站稳了脚跟。

在此之后,游戏业界都受此启发,各式各样的游戏引擎层出不穷。而各种游戏引擎的出现,使得游戏开发并不需要从零开始,从而使得开发的周期大大缩短,也使开发成本大大降低。

游戏引擎崛起,游戏产业的黎明,就此降临。

2.什么是游戏引擎

游戏引擎好比赛车的引擎,是用于控制所有游戏功能的主程序,从计算碰撞、物理加速系统和物体的相对位置,到接受玩家的输入,以及按照正确的音量输出声音等等。无论是角色扮演游戏、即时策略游戏、冒险解谜游戏或是动作射击游戏,哪怕是一个只有1兆的小游戏,都有这样一段起控制作用的代码。

这里我们丢出一个概念。游戏引擎是指一些已编译好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出一款游戏作品,而不是从零开始写起,这样大大缩短了开发的效率,开发的时间和开发的成本。

可以这样说,游戏引擎让我们站在巨人的肩膀上进行游戏的开发,而不是从零开始。

3.一款完善的游戏引擎的构成

我们很大程度上将游戏引擎都理解为渲染引擎,分为2D图形引擎和3D图形引擎,其实游戏引擎并不单单指渲染引擎。渲染引擎只是一款完善的游戏引擎最重要的组成部分,而一款完善的引擎,还包含物理引擎,碰撞检测引擎,音效引擎,脚本引擎,电脑动画引擎,人工智能引擎,网络引擎,场景管理引擎以及IO管理引擎等等。

其中,3D引擎的渲染系统通常建立在一套或者多套高级的图形API之上,比如我们熟知的Direct3D与OpenGL。

4.DirectX与游戏引擎的区别

很多朋友在评论中提到不清楚DirectX与游戏引擎到底有何区别,在这里我们就来展开讲一下,其实说起来非常简单。

首先,DirectX是微软旗下的一种应用程序接口(API),它为各种品牌的硬件提供了一个共同的硬件驱动标准,无论你是什么牌子的硬件,只要你遵循DirectX约定的准则,用DirectX这套API开发出来的游戏就可以在你的硬件上很好的运行。DirectX,我们可以理解为他为硬件驱动。而Direct3D,只是DirectX之中负责3D图形渲染的一个组件而已。

游戏引擎是为了实现一款游戏雏形而编写的一系列可重用的代码,很多游戏引擎的渲染部分实现了对Direct3D的封装。我们可以理解游戏引擎为一系列的软件代码,而我们利用游戏引擎中已经现存的代码,开发起游戏来就能事半功倍。

所以,综合一下。

DirectX可以理解为硬件的驱动,它为各种品牌的硬件提供了一个共同的硬件驱动标准。

游戏引擎,是一系列构成一款游戏的可重用的代码,是用于控制所有游戏功能的主程序,游戏引擎的前身可为一款完整的游戏作品。

5.人气开源游戏引擎介绍

想事半功倍地开发出属于自己的游戏,在选择游戏引擎上是必须要下足功夫的。

多半的游戏引擎都开源且免费授权的,也就是说,如果我们采用某款开源游戏引擎开发出了自己的游戏,无需任何费用,只要在我们的游戏作品中表示,使用了什么引擎来进行游戏开发的就可以了。也就是我们经常在很多游戏片头会看到的logo。Power by XXX,比如Power by Ogre。下面我们就来介绍几款目前比较火热的开源游戏引擎,我们用他们进行游戏开发是完全免费的:

Ⅰ.Irrlicht Engine

Irrlicht Engine(鬼火引擎)始于2003年,次年即被评为最佳开源游戏引擎。它具有高性能的实时3D引擎,用C++编写,也可用于.Net语言。拓展语言绑定包含java,perl,ruby,python.跨平台支持,使用D3D,OpenGL以及自带API. Irrlicht Engine可以在移动平台Android以及iOS上使用。值得一提的是,鬼火引擎有专门的Andorid版。

其功能特点可以与商业3D引擎相比。优点是容易掌握,好学。新手入门建议学习Irrlicht

Ⅱ.Ogre

OGRE(面向对象的图形渲染引擎):OGRE是用C++编写的,以现场为导向,灵活的三维引擎,它主要用于那些利用硬件加速的3D图形应用程序。它的类库提取了所有基础系统库的细节,如Direct3DOpenGL ,并提供了一个基于世界对象和其他直观类的界面。Ogre支持跨平台,也就是说,Ogre理论上可以在Android以及iOS等移动平台上使用,不过需要进行相关的移植。

Ogre人如其名,完全采用面向对象的思想来进行设计,整体结构显得非常优雅,宛如一件艺术品。在开源游戏引擎中,Ogre有着最华丽的渲染质量,可以和大多数3D商业引擎的渲染效果一较高下。浅墨非常喜欢这款开源引擎,只可惜它仅仅是图形引擎,而不是功能全面完整的游戏引擎。值得一提的是, 目前非常具人气的ARPG游戏《火炬之光》系列就是采用的Ogre引擎。

这里我们贴一些2012年9月20日刚上市的《火炬之光2》的游戏美图:

好了,看完绚丽的游戏截图,下面我们继续来学习。相信总有一天,我们也可以亲手写出这样优秀的游戏作品出来。

Ⅲ.Delta3D

Delta3DDelta3D是一个功能齐全的游戏引擎,可用于游戏,模拟或其他图形应用。其模块化设计集成了其他的开源项目,如开放场景图开放动力学引擎人物动画库‘OpenAL’ Delta3D把这些开源项目集成到一个易于使用的应用程序编程接口中。

Ⅳ.NeoEngine
NeoEngineNeoEngine是一个全功能的用C++编写的开源3D三维游戏引擎。该引擎是多平台的,包括OpenGLDirectX渲染功能,支持Windows LinuxMac OS X系统,它提供了场景管理,顶点和像素着色,骨骼动画和物理,脚本以及一个完全集成的工具链。



Ⅴ.Bullet
BulletBullet是三维游戏多重物理库,提供最先进的碰撞检测,柔软身体和刚体动力学。这个游戏引擎被许多AAA级的游戏公司用在PS3 Xbox 360 ,任天堂的Wii、以及PC 。这个库可以免费用于商业用途。


Ⅵ.Power Render
Power RenderPower Render是一个为游戏和3D图形准备的软件开发工具包。它为开发者提供了一个API,为美工准备了一些工具,这些工具可以实时预览3ds MaxMayaLightwave的模型。新版本还可以预览高动态范围成像并支持OpenEXR文件格式。下载 Power Render 6 35.1MB exe)。

6.一些思考

很多朋友也会想到,既然都有了现成的游戏引擎为我们封装好各类DirectX和OpenGL的库函数,甚至做出了各类可视化的设计工具,让我们无需了解调用的细节就可以用这些工具来制作出自己的游戏,那我们是不是就不用去学习图形API,也就是不用去学习Direct3D(或者OpenGL)了?

一千个人人眼中有一千个哈姆雷特。

如果你是本着快速开发一款游戏就完事交差的心态,知其然不知其所以然,DirectX其实并不用去学习,直接去学习一款好的游戏引擎的SDK就可以了。

如果你是本着学习求知的心态,想要把游戏开发的各方面知识和细节做到心中有数,甚至以后想自己写一款游戏引擎,DirectX(或者OpenGL)是必须要学的。学完DirectX(或者OpenGL)之后,再来接触一款游戏引擎,接触它的源码,我们就有资本看懂这些源码的实现细节,就可以很容易地把这款游戏引擎使用DirectX(或者OpenGL)进行渲染的细节脉络看得清清楚楚。经常我们还涉及到了各种不同版本硬件渲染的支持问题,比如DirectX 8与DirectX9,这时候就会考验我们对图像API的掌握情况。 同样,掌握了DirectX(或者OpenGL)更利于我们对渲染的优化。

7.市面上各类游戏引擎的列举

最后,下面我们列举出市面上存在的游戏引擎,点击各个引擎的名字就可以跳到相应的引擎官网地址了。

需要指出的是,这里的引擎有的只是图形引擎,有的只是物理引擎,也就是说并不都像那些完善的商业引擎,比如虚幻3引擎(Unreal Engine3)一样,具有完善而功能全面的物理引擎,碰撞检测引擎,音效引擎,脚本引擎,电脑动画引擎,人工智能引擎,网络引擎,场景管理引擎以及IO管理引擎等等。

开源2D引擎:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值