关于在线版本

这原本是一本书。现如今,很多与3D数学与游戏编程有关的技术都可以在线上学习,因此一些读者可能难以想象这样一本实体书的样子。这如果恰好说中了你,那么可以参照图1。

图 1

它包含了一些过时的玩意,比如说ISBN编号、索引、参考书目,还有章节、小节以及页编号。 甚至它还有没有被分割成短句的大段散文,就像你现在读到的句子一样(译注:原文这一段很长。) 这种知识表现形式重达4磅(译注:约1.8千克),这让它相对于在线版本存在一些优势。 它可以被用来卡门或者是把显示器垫高。 你可以把实体书摆在书架上供大家参观,来证明自己是真实且有抱负的。不管你是不是读过这些书,这招都很有用! 不过话说回来,阅读实体书的最大好处就是你可以一眼看出它有多厚。 你正在阅读一本850页的书。

还有,这本书发布于2011年。那时距英雄联盟横空出世已经过了两年,天际省刚刚出现在人们的视野中,而距离PS4发售还有两年。 不过嘛,我们可以自豪的说,这本书所包含的内容,就像比尔博拥有魔戒时那样,依旧年轻。 向量和矩阵还是使用同样的方法进行计算,$F$仍等于$ma$,人们仍在使用Blinn-Phong(译注:一种反射模型)。

这本书的标题是说的“游戏开发”,但本书大量涵盖的内容甚至可以适用于游戏之外的东西。 几乎所有想要模拟、渲染和理解三维世界的人都会觉得这本书很有用。 尽管我们确实尝试提供游戏开发领域的启发性例子,但由于这是我们的专业领域,也是我们主要目标受众, 所以如果你上一部通关的游戏是Space Quest,你就不会被抛弃。1 如果你的目光不仅仅局限于游戏,请放心,本书中不会充斥游戏中关于爆头、断肢或是如何使血液逼真的具体示例。

为什么你应该阅读这本书

本书有许多独特的功能,其中包括话题、方法、作者以及写作风格。

独特的话题 本书填补了图形学、线性代数、仿真和编程的其它书籍所留下的空白。 这是一本介绍性的书,也就是说,我们会对3D的基本概念进行全面而集中的介绍。 这些话题通常会被简单的几页涵盖,或被归类为其它书籍的附录。 (因为你已经了解了所有的这些内容。) 我们发现初学者通常难以掌握这些话题! 这么说吧,这本书就像图形、物理和曲线粘在一起的缝合怪的镜像。 始于对数学基础的简要概述, 而后对应用领域进行深入介绍的书籍通常让人云里雾里。 所以我们首先对数学基础进行了全面的介绍, 然后我们会对应用领域进行高层次的简要概述。
这本书为初学者提供了一个美妙的入门途径, 但这并不意味着我们的会止步于此。 如果按照传统, 这里会有很多材料会被认为是“高级的”, 只会在高年级或是研究生课程中讲授。 但事实上,这些主题的专业性其实超越了其难度, 它们应该成为被提前讲授的重要内容, 而这正是推动对此类书籍需求的一部分。
独特的方法 为了吸引读者,所有作者都会在专业性与有趣性之间进行取舍,我们也不例外。 当然,我们也明白,不同意这种看法的人会觉得这本书过于非正式。 (请参阅“贴纸提示”的索引条目)。 我们会关注清晰的解释以及直觉,有时还会以牺牲严谨性为代价。 但我们目标是简化而不是过度简化。 如果我们可以避开巨龙和巨魔,带领读者达到目标, 那么为什么我们还要去走那些繁琐的路呢。 当然,我们也知道最终读者将自己去探索那些“危险区域”, 所以在我们抵达目的地后,我们将回头指出危险所在。 但是,如果我们觉得常规做法不会出现危险时,某些“巨魔杀手”会指向其它地方。 经常在这片土地上游荡的人应该要学会去向当地人求学以提升自己的知识储备。 我们并非认为严谨性是不重要的;我们只是认为, 在对大局有了直观的把控后,才能变得严谨, 而不是将每个要讨论的问题都与处理极端情况所需的定理和公理相提并论。 讲真的,如今的读者都可以从Wikipedia或是 Wolfram MathWorld 上得到简明扼要的知识,因此我们认为任何书都不应该 花费太多精力在定义、公理、证明和特殊案例上。 在主要是面向工程师的入门资料中,这方面的精力并不值得付出。
独特的作者 我们的丰富经验包括学术权威和切实可行的建议。 Fletcher Dunn自1996年以来,一直从事着游戏行业。 他曾作为首席程序员在Dallas的Terminal Reality工作。 他是Infernal引擎的架构师之一,也是BloodRayne的首席程序员。 他曾是迪士尼Wideload Games的技术总监, 以及荣获IGN 2010年度E3家庭游戏的《Disney Guilty Party》的首席程序员。 他现在在位于华盛顿的V社上班,并对Steam和Valve的所有最新游戏都有着贡献。 他是GameNetworkingSockets 网络库和Steam数据报中继服务 的主要作者。 当然了,迄今为止,他最大的名气来源于《使命召唤:现代战争2》中的邓恩下士。
Ian Parberry博士 在学术界有超过35年的研究和教学经验。 这是他的第六本书,也是关于游戏编程的第三本。 他目前是北德克萨斯大学计算机科学与工程系的终身教授。 他是举世闻名的高等教育游戏编程的先驱之一, 自1993年以来一直在北德克萨斯大学教授游戏编程课程。
独特的写作风格 我们有两个希望你们会喜欢阅读这本数学书(什么鬼?)的原因。 首先,我们想让你从这本书学到东西,而学习你感兴趣的内容是十分有趣的一件事。 再者,我们想让你像阅读一个文学作品一样享受阅读这本书的乐趣。 我们没有妄想我们与马克·吐温处于同一层次, 也没有幻想这本书注定要成为像《银河系漫游指南》(The Hitchhikers Guide to the Galaxy)一样的经典著作。 但是,人们总是有所抱负。 说实话,我们只是傻瓜。同时,任何写作风格都不应当取代第一要务—— 清晰地交流有关视频游戏的数学知识。2

你所需要的前置知识

我们尝试让这本书能适合更多读者阅读。但是,这本书显然不能从最基本的公理开始阐述。 我们希望读者具有以下数学技能:

  • 运用代数表达式、分数和基本代数定律,如结合律、分配律以及二项式等……
  • 了解什么是变量,什么是函数,如何绘制函数的图像等……
  • 一些简单的欧几里得二维空间基础,比如什么是点,什么是线,线平行或是垂直的性质等等。 一些地方会使用面积和周长的公式。如果你暂时忘记了这些,那也没关系。只要你在看到它们的时候想起来就好了。
  • 最好事先接触三角函数。我们将会在本书的开头对三角函数进行简要的回顾。但在本书的其它地方,没有给出相同程度的解释。
  • 事先接触过微积分的读者会有一些优势,但是本书会将对微积分的应用限制在一些基本的法则上。 我们会(尝试)在第11章为没有接受过微积分训练的读者讲授这些知识。 本书只使用最高级的概念和基本的定理。

一些编程知识是有助于学习的,但也不是必需的。 在某些地方,我们给出了简短的代码段,用以展示所讨论的思想如何转换成代码。 (此外,某些过程用代码解释起来也更加容易。) 这些代码片段将十分基础且有着明确注释,只需要对C语言语法(被其它好几种语言参考的)有着最基本的了解即可。 大多数技术美术或是关卡设计师应该能够轻松理解这些片段。

概览

  • 第一章 从本书的其余部分所需的一些基础知识(你可能已经了解了一些)开始进行热身。 它回顾了二维以及三维中的笛卡尔坐标系,并讨论了如何使用笛卡尔坐标系来定位空间中的点。 还快速地包括了三角函数以及求和符号的用法。
  • 第二章 从数学和空间的角度介绍向量,并研究点和向量之间的重要关系。 它还讨论了许多矢量运算—— 如何执行它们,几何意义上执行它们以及可能会发现它们有用的情况。
  • 第三章 讨论坐标空间的例子,并展示如何将其嵌套在层次结构中。 它还介绍了基本向量和坐标空间转换的中心概念。
  • 第四章 从代数和空间的角度介绍了矩阵,并说明矩阵是线性变换背后的数的紧凑表示法。
  • 第五章 详细研究了不同的线性变换及其对应的矩阵。它还讨论了分类转换的各种方式。
  • 第六章 涵盖了矩阵的一些更加有趣(用)的性质, 比如说仿射变换和透视投影, 并解释了三维向量和矩阵在三维世界中的目的和原理。
  • 第七章 讨论如何在二维和三维中使用极坐标, 为什么这样做是有效的, 以及如何在极坐标与笛卡尔坐标之间转换。
  • 第八章 讨论用于表示三维方向和角位移的不同技术:欧拉角、旋转矩阵、指数映射和四元数。 对于每种方法,都会说明其工作原理,并介绍其优缺点及其应用场景。 最后还会展示如何在不同的表示形式之间转换。
  • 第九章 研究了许多常用的几何图元,并讨论如何从数学上表示与操作它们。
  • 第十章 这是对图形学的快速教程,涉及一些我们选定的理论以及现代实践问题。 首先,它概述了“图形学的工作原理”,并最终提出了渲染方程。 然后,本章将介绍一些与数学相关的理论话题。 接下来,会讨论两个可能可以引起读者兴趣的现代话题,它通常是数学难题的出处: 骨骼动画与凹凸贴图。 最后,本章将简要介绍实时图形管线, 演示了如何在当前渲染硬件的背景下实现本章上半部分的理论。
  • 第十一章 这章会塞入两个相当大的主题——使用你大一学习到的微积分来讨论刚体运动学。 我们会讨论高层次的话题,即如何描述和分析刚体运动, 而不必了解其原理或是与方向或旋转扯上关系。
  • 第十二章 从对经典力学的简明解释开始,继续讨论刚体力学。 包括牛顿运动定律和一些基本概念,如惯性、质量、力和动量。 本章将会回顾一些基本的力学定律,如重力、弹力和摩擦力。 本章还考虑了到目前为止讨论的所有线性思想的旋转类似物,并对碰撞这一重要主题给予了应有的重视。 最后本章会讨论使用计算机模拟刚体时可能出现的问题。
  • 第十三章 解释了三维的参数曲线。 本章的前半部分会说明一些常见的,用于表示一条较短的曲线的重要形式, 如monomial、Bézier和Hermite。 后半部分则会涉及将一些较短的曲线组合成一条较长的曲线。 称为样条函数(spline)。 为了便于理解每个系统,本章考虑了系统向曲线设计者提供的控件, 如何对设计者制作的曲线进行描述并重新创建曲线, 以及如何使用这些控件来构建具有特定属性的曲线。
  • 第十四章 启发读者在游戏中追求更好的技术
  • 附录 A 是可以在几何图元上执行的各种有用测试的组合。 我们打算将其作为有用的参考,但也可以使看书变得有趣。
  • 附录 B 所有的答案都在这了。3

如何反馈

我们计算了一下可以写出800多页没有错误的数学书的几率。 结果是一个负数,我们知道这是不对的,但可能非常接近了。 如果您发现本书中的错误或有任何反馈, 请发送电子邮件至feedback@gamemath.com或通过 Twitter(@ZPostFacto)与Fletcher联系。

翻译问题请在 Repo 中提出issues。


1. Emmm,你可能听不懂这种笑话,对不起。

2. 这就是为什么我们把大多数笑话和无用的琐事放在脚注里的原因。不过,我觉得我们可以有更好的办法来避免这种情况。

3. 当然是练习题的答案啦。