3D Engine 的设计架

咱们谈谈你如何撰写一份提供优雅性能的3D引擎。你的引擎需要提供的包括:曲面(curved surfaces)、动态光线(dynamic lighting)、体雾(volumetric fog)、镜面(mirrors)、入口(portals)、天空体(skyboxes)、节点阴影(vertex shaders)、粒子系统(particle systems)、静态网格模型(static mesh models)、网格模型动画(animated mesh models)。假如你已经知道如何以上所述的所有功能顺利工作,你也许便能将那些东东一起置入到一个引擎当中。
等等!在你开始撰写代码前你必须先构思一下如何去架构你的引擎。多数来讲,你一定是迫切地渴望去制作一个游戏,但如果你立即投入便开始为你的引擎撰写代码后,你一定会觉得非常难受,开发后期你可能会为置入新的特效与控制而不得不多次重写大量的局部代码,甚至以失败而放弃告终。花一点时间好好地为你引擎深谋远虑一番,这将会为你节省大量时间,也少一点头痛。你一定不会急切地去架构一个巨型的工程;或许你也会在引擎未完成时而干脆放弃它,然后去干的别的什么事儿。好了,当你掌握学习你所需知识的方式之前,也许你还不能完成那些事儿。将设计真正地完成确实是件美事,为之你会感觉更好,你将为之而耀眼!

让我们分析一下具备完整功能的3D游戏引擎的需要哪些基本部件。首先,这为具有相应3D经验但且还需一些指引的开发者提供了一些信息。这是一些并不难且能快速掌握但是你必须应用的内容条目。为将你的工作更好地进行下去,这里将对关于“把多大的工作量”与“多少部分”置入一个游戏引擎给出一个总概。我把这些成分称为 系统(System)、控制台(Console)、支持(Support),渲染/引擎 内核(Renderer/Engine Core)、游戏介质层(Game Interface)、以及工具/数据(Tools/Data)。

Tools/Data (工具/数据)

在开发过程中,你总是需要一些数据,但不幸的是这并不象写文本文件或是定义一个立方体那么简单。至少,你得需要3d模型编辑器,关卡编辑器,以及图形程序。你可以通过购买,也可以在网上找一些免费的程序满足你的开发要求。不幸的是你可能还需要一些更多的工具可你却根本无法获得(还不存在呢),这时你只得自己动手去写。最终你很可能要自行设计编写一个关卡编辑器,因为你更本不可能获得你所需。你可能也会编写一些代码来为大量的文件打个包,整天面对应付成百上千个文件倒是非常痛苦的。你还必须写一些转换器或是插件将3d模型编辑器的模型格式转换成你自己的格式。你也需要一些加工游戏数据的工具,譬如可见度估算或是光线贴图。

一个基本的准则是,你可能要为设计工具而置入比游戏本身等量甚至更多的代码。开始你总能找到现成的格式和工具,但是经过一段时间以后你就能认识到你需要你的引擎有很大的特性,然后你就会放弃以前的撰写方式。

也许目前非常流行利用的第3方工具辅助开发,所以你必须时刻注意你的设计。因为一旦当你将你的引擎发布为opensouce或是允许修改,那也许在某天中会有某些人来应用你的开发成果,他们将其扩展或者做某些修改。

或许你也应该花大量时间去设计美术,关卡,音效,音乐和实体模型,这就和你设计撰写游戏,工具以及引擎一样。

System (系统)

系统(system)是引擎与机器本身做通信交互的部件。一个优秀的引擎在待平台移植时,它的系统则是唯一需要做主要更改(扩加代码)的地方。我们把一个系统分为若干个子系统,其中包括:图形(Graphics)、输入(Input)、声音(Sound)、记时器(Timer)、配置(Configuration)。主系统负责初始化、更新、以及关闭所有的子系统。

图形子系统(Graphics Sub-System)在游戏里表现得非常直观,如果想在屏幕上画点什么的话,它(图形子系统)便干这事儿

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/huangchonghai/archive/2007/08/31/1767521.aspx

你可能感兴趣的:(Engine)