前言

0.1 这是一本什么样的书

本书的目标是帮助读者独立开发出 3D 游戏。

这么讲可能太过空泛,具体来说,就是开发出一个机甲战士射击游戏。

当然,马上就进入这个游戏的开发是不大现实的,我们得从最基础的部分开始学起,而这部分可能会很枯燥。

图像说明文字

0.2 读者对象

本书的读者对象是下图灰色区域所示的程序员或者立志成为程序员的人。

图像说明文字

一心想开发出商业水准的游戏,但刚开始也不知道该买什么样的书来读,买了也未必会认真地读下去;勉强写过一些代码,但读了几本专业教材后还是觉得没什么提高,一拿起编程书就昏昏欲睡……

这些可能是该群体的读者共有的特点。

遗憾的是,面向该群体的书少之又少。放眼图书市场,要么是针对游戏各个细分领域的专业图书,要么是旨在向新手传达游戏开发乐趣的入门书。对该群体的读者来说,专业书读起来太费劲,而入门书又很难起到提升水平的作用。他们需要的是一本既能读懂,又能有效提升水平的教材。本书就是这样的一本书。

0.2.1  前提技能

虽然本书在执笔时尽可能地考虑了初学者的接受能力,但也不是说就不需要读者有任何基础。毕竟对零基础的读者来说,开发 3D 游戏这样的目标太高了。具体来说,本书需要读者具备以下技能。

图像说明文字 编程相关的技能

游戏制作离不开编程,尤其是以复杂闻名的 C++。

虽然也可能存在不用编程就能制作游戏的方法,但是由于本书旨在介绍游戏编程,如果采用那种方法,本书也就失去存在的意义了。

尽管书中会用相当多的篇幅来讲解编程相关的内容,但对于零基础的读者来说,这些讲解仍然是不够的。因此,本书要求读者具备一定程度的 C++ 编程基础。

所谓“一定程度”,恐怕很难有明确的标准来衡量。不过参考下面列出的几点,读者就能大概感受到具体是什么程度了。

● 会写函数

● 知道如何创建类

● 熟悉变量、数组和流程控制等概念

除此之外,关于下面的内容,书中也会有一些补充说明。这些内容虽然很多读者可能经常用到,但是未必能真正理解。

● 指针、new和 delete等内存操作以及指针和数组的关系此外,本书假设读者没有接触过下面这些知识。对于这些知识,书中也会进行必要的讲解。

● const的使用方法

● 名称空间

● 模板

● 类的继承

● 运算符重载

● C/C++标准库

并不是说没有掌握这些知识就不能开发游戏。实际上,笔者最早参与的游戏项目团队中,也没有谁完全掌握了这些知识。但是,如果熟悉这些知识,在编程时就更加得心应手,这样就可以把更多的精力用来提高游戏的趣味性。也就是说,熟练掌握编程语言是为了更容易做出有趣的游戏。

另外,有些读者虽然没学过 C ++,但是对 C# 或者 Java 非常熟悉。不用担心,这些读者也能读懂本书。关于 C++ 与这些语言的最大区别,也就是指针和 delete相关的内容,我们会在第 1 章最后详细说明,建议这些读者提前阅读该部分内容。不过,本书不会讨论语法细节,关于这方面的知识,读者只要准备一本 C++ 入门教材以便随时查阅就足够了。

图像说明文字  数学相关的技能

游戏开发同样需要一些数学知识。

貌似有些开发人员不懂数学也照样能开发游戏,但那只不过是将数学方面的工作推给了他人而已。在独自一人进行开发的情况下,这种做法是行不通的。

正因如此,本书也介绍了很多数学方面的内容。当然,如果读者完全没有数学基础,理解起来可能会有些困难。因此,本书要求读者至少具备高中一年级程度的数学知识。

多项式的操作和函数的概念,以及中学水平的几何知识,这些都是阅读本书所必需的,不过书中都会有详尽的说明,所以即便读者稍微有些忘记了也没有关系,如果实在感到吃力,可以重新翻阅一下中学教材。关于三角函数和联立方程,书中也会有一些介绍,以帮助读者复习。另外,本书假设读者没有向量、矩阵和微分方面的基础,所以也安排了相关章节来讲解。

0.3 必要准备

本书是一本适合自学的书,读者只需准备一台计算机即可,无须他人的协作。下面是一些详细要求。

0.3.1  编译器和操作系统

计算机需要安装 Visual Studio 2017 版本,免费的 Express 版本也可以。这些版本都要求计算机已安装 Service Pack1 补丁,如果安装后仍无法启动,请参考微软的官方网站。

如果读者是首次使用 Visual Studio,可能会面临操作系统不兼容的问题。安装 Visual Studio 需要Windows XP 或者 Windows Vista 操作系统,如果读者使用的是 Windows 2000 以前的版本,连同整个计算机都换掉或许是最快的方法。

0.3.2  DirectX

计算机必须安装 DirectX 9.0c 以上的版本。如果没有安装或者版本太低,可以从微软的官方网站下载新版本。

0.3.3  CPU 和内存

计算机的配置只要能够支撑 Visual Studio 运行即可。一般而言,1 GHz 以上的 CPU 搭配 1 GB以上的内存就足以很好地运行,比这个配置稍微差一些也没有问题。

0.3.4  显卡

现在的计算机已经不会仅通过 CPU 来完成图形计算了,本书也假定读者的计算机已经安装了显卡。最近几年出厂的计算机基本上都配置了 3D 显卡,所以这一点读者不需要担心。

计算机配置不足可能会有性能问题,不过画面毕竟只是游戏的一个元素,笔者不想将那些计算机配置较差的读者排除在外,所以本书会尽量兼顾配置较差的计算机,2002 年后的安装了 Windows XP 的计算机应该都没有问题。

另外,有些读者希望能发布自己的游戏,于是会对游戏的画质有一定的要求。在这种情况下,可以在程序中加入判断,当游戏检测到达到某种规格的显卡时就自动提升画质 ①。

如果读者的计算机还有升级的可能,不妨借这个机会升级到最新的硬件,其实不用花费多少钱就能够升级到很好的配置了。

0.3.5  关于图片和音效素材

实际上,仅靠一个程序员是无法制作出游戏的,还需要音效师、美术设计师等。不过,本书并不指望读者周围存在这样的角色。网络上可以搜索到很多没有版权的音效素材,美术素材也可以自己进行涂鸦创作。就像前面所说的那样,本书的目标是帮助读者独立做出一款游戏。因此,需要美术设计师才能做下去的内容不会在本书中出现。

当然,这样创作出来的游戏画面一定是惨不忍睹的。不过,程序弄好之后再替换美术素材其实非常简单,这方面的工作可以在后面的阶段进行。

因此,这里要提醒读者的是,读完本书并不意味着就能够做出商业作品那样绚丽的游戏。那种产品往往需要投入上亿资金才有可能打造出来,不是仅仅依靠技术就可以实现的。

0.4 本书的知识结构

本书就像一条从山脚蜿蜒而上的山路,虽漫长但不陡峭,让读者一路欣赏风景直至顶峰,不会半途而弃。而另一方面,这也导致本书页数超级多。

这些“风景”就是当下游戏编程中最常见的内容,本书力图为读者进行相对全面的介绍。本书的知识结构大致如下图所示。

① 支持 Pixel Shader 2.0 以上的硬件,比如 nVidia 生产的 GeForceFX(5XXX)系列以上、AMD(原 ATI)生产的Radeon 9500 以上、Intel 生产的 82915G 以上。

图像说明文字

当然,光这些内容,深究起来恐怕再写几千页也不够,因此本书在介绍完必备的基础知识后就进入下一部分的内容,对各部分内容都是点到为止。虽然读者可能会觉得意犹未尽,但重要的是这样可以迅速地对整体有所把握。掌握了相关的基础知识后,读者就可以自行深入研究了。

另外,本书尽量避免贸然引入不知是否有必要的新知识。笔者本人就只对需要用到的知识感兴趣,想必读者也是如此。因此,本书没有一开始就讲数学。虽然读者在读完本书之后能够体会到数学的重要性,但一开始谁又会关心呢?这就像递给从未见过螺丝的人一把螺丝刀一样,这么做毫无意义。

如果过早地向读者灌输一堆不知道能用来做什么的东西,读者就会因为感到枯燥而跳过,后面知道用途时再跳回去阅读,不胜烦琐。本书会尽量避免这种来回折腾的情况。

0.5 本书的阅读方法

本书在讲解技术的过程中夹杂了不少笔者的“私货”,这也是为了增强可读性,避免读者长时间停在某一页。因此,如果读者在阅读时遇到了无法理解的内容,建议先将其跳过。

当然,如果你不喜欢这样,而是习惯每一页都彻底理解后才肯翻到下一页,也不是不可以。实际上这种做法的效果反而是最好的,只不过一旦中途放弃就毫无意义了。

“请读者自己尝试后再继续往下看”“下面让我们来看一下示例代码”……对于书中类似这样的 “指示”,笔者在读书时从未遵从过。当然这类指示有其存在的理由,但是如果觉得照着做很麻烦,也可以在暂时没有完全理解的情况下先大致通读一遍。与其花费大量时间试图一遍读懂,反复通读几遍可能更省力一些。

既然读者的最终目的是开发游戏,那么最后肯定会开始自己编写代码,届时就不得不去琢磨细节,到那时再去认真阅读示例代码也不迟。

0.6 关于随书下载

随书下载中包含了所有示例代码。

关于随书下载内容的使用许可,后面会有专业的法律条文说明。简单地说,除了图片素材之外的所有内容都没有使用限制,但是笔者不承担任何责任,也不提供技术支持。

读者既可以将其中的大部分内容用到自己的游戏中,甚至作为商业产品发售,也可以按照自己的想法进行改造,并将改造后的作品发布在自己的网站上,对外宣称“这是我做的”,然后拿去发布甚至发售,这些都是被允许的。

但是,图片素材例外,图片素材不允许在商业产品中使用。只要你的作品不用于商业用途,则使用条件与其他内容相同。

如果你想用于学习以外的其他用途,保险起见,最好阅读一下下面的使用许可协议。

0.6.1  软件使用许可协议

以下是用法律语言撰写的相关条款。


本协议是株式会社世嘉(以下称“世嘉”)授权随书下载内容中的软件(包括执行程序、源代码、二进制文件以及类库,以下称“本软件”)以及图片素材(以下称“本图片素材”)的使用权的前提条件。用户只有在同意并接受本协议后,方可使用本软件以及本图片素材。

用户下载随书资源的内容,即被视为同意并接受本协议。请在确定同意并接受本协议后再下载。如果出现违反本协议的情况,世嘉有权按照本协议终止用户的使用权。

图像说明文字  使用许可

世嘉承诺,用户在同意并接受本协议各条款的前提下,拥有对本软件和本图片素材在下列各条款约束范围内的免费非独占使用权。

图像说明文字 使用许可的范围

使用许可的范围和内容如下所示。

a. 本软件:使用、复制、转让、发布、公开、改变、改编的行为,商业目的和非商业目的均可

b. 本图片素材:使用、复制、免费发布、公开、改变、改编的行为,仅限于非商业目的

图像说明文字  禁止事项

禁止用户因使用本软件和本图片素材而损害世嘉或者其他第三方的信用或造成损失等,禁止任何可能会被误认为是世嘉的行为的行为。

图像说明文字 免责事项

无论是否明确声明,本软件和本图片素材均按现状提供,世嘉不提供任何保证。此处的保证包括但不限于:正确性、完整性、可用性、可信赖性、商品性、针对特定目的的适用性,以及对不侵害第三方权利的保证。另外,对于与本软件和本图片素材相关的一切请求、损害及其他义务,世嘉不承担任何责任,也不提供相关的技术支持、维护、更新、升级、改良和咨询应对。


目录

  • 译者序
  • 前言
  • 第1部分 2D 游戏
  • 第1章 第一个游戏
  • 第2章 从像素开始学习2D 图形处理
  • 第3章 使用图片素材
  • 第4章 实时游戏
  • 第5章 简单的状态迁移
  • 第6章 文本绘制方法
  • 第7章 动作游戏初体验
  • 第8章 2D 平面内的碰撞处理
  • 第9章 各种输入设备 
  • 第10章 状态迁移详解
  • 第11章 播放声音
  • 第12章 旋转、缩放与平移
  • 第13章 显卡的力量
  • 第2部分 3D 游戏
  • 第14章 绘制立体物体
  • 第15章 类库的封装方法
  • 第16章 伪XML 文件的读取
  • 第17章 编写高性能的代码
  • 第18章 3D 碰撞处理
  • 第19章 《机甲大战》的设计
  • 第20章 光照
  • 第21章 角色动画 
  • 第3部分 通往商业游戏之路
  • 第22章 高效的碰撞检测 
  • 第23章 数据加载
  • 第24章 float 的用法 
  • 第25章 随书类库概要
  • 第26章 bug 的应对方法
  • 第27章 进阶方向