本书游戏引擎工程的不同点
这本书的目的是在示范如何创建一个示例游戏引擎时,讲解游戏引擎所有的基本组成部分。可以扩展示例游戏引擎来建造你的游戏。我使用DirectX 9来渲染。如果你偏好OpenGL,我把它作为编码练习留给你,用OpenGL API替换Direct3D API。两套API都支持相同的渲染能力。
本书研究的游戏引擎不专研使用vertex和pixel shader可以作出的伟大的事情。(作为主题,DirectX 9里的新的高级着色语言可以充满一整本书。)也不研究如何优化地形渲染和角色动画。
在贯穿全书的示例引擎的开发中,我会更多的集中讲一个面向对象、通用的方法来进行游戏引擎的设计。这个游戏引擎不是意味着可以应用在下一代一鸣惊人的游戏中,去冲击市场。相反,我希望提供一个基本的,灵活的游戏引擎,你可以学到用在开发自己的3D游戏引擎的新知识。面向对象方法将会制作出一个模块化的引擎,它可以容易的修改和扩展,当你要把更加高级的游戏引擎组件加入其中时。
面向对象方法
为了开发一个清晰的、一般化的设计,我们在这个游戏引擎的设计和开发过程中使用面向对象技术。面向对象的设计和编程(当做的得当时),能得到一个简洁的、易懂的和易于维护的最终系统。我指定C#语言作为开发语言,因为它拥有这个项目所有需要的面向对象特性。
为什么是C#
你也许在为我选择C#语言作为开发语言而疑惑。基于性能考虑,近代几乎所有的游戏都是使用C或者C++开发的。Microsoft创造了C#语言,试图带给C++社区类似于Visual Basic的快速开发(RAD)。作为.NET首发阵容的一部分,Microsoft也增加了Visual Basic的性能和面向对象特性。DirectX 9的目标是把运行时间控制在C++的两倍之内。这就使得选择使用RAD语言变得非常有吸引力了。倾情喜爱C#是因为它有自动文档的功能。现在开发一个游戏通常是一个团队的努力。几乎不可能一个人单挑整个游戏。这使得共享清晰的代码和代码文档显得异常重要。C#中清晰的、面向对象的结构,结合良好的注释和文档约定,是你是否赶上时程的区别所在。