关于在线版本
这原本是一本书。现如今,很多与3D数学与游戏编程有关的技术都可以在线上学习,因此一些读者可能难以想象这样一本实体书的样子。这如果恰好说中了你,那么可以参照图1。
它包含了一些过时的玩意,比如说ISBN编号、索引、参考书目,还有章节、小节以及页编号。 甚至它还有没有被分割成短句的大段散文,就像你现在读到的句子一样(译注:原文这一段很长。) 这种知识表现形式重达4磅(译注:约1.8千克),这让它相对于在线版本存在一些优势。 它可以被用来卡门或者是把显示器垫高。 你可以把实体书摆在书架上供大家参观,来证明自己是真实且有抱负的。不管你是不是读过这些书,这招都很有用! 不过话说回来,阅读实体书的最大好处就是你可以一眼看出它有多厚。 你正在阅读一本850页的书。
还有,这本书发布于2011年。那时距英雄联盟横空出世已经过了两年,天际省刚刚出现在人们的视野中,而距离PS4发售还有两年。 不过嘛,我们可以自豪的说,这本书所包含的内容,就像比尔博拥有魔戒时那样,依旧年轻。 向量和矩阵还是使用同样的方法进行计算,$F$仍等于$ma$,人们仍在使用Blinn-Phong(译注:一种反射模型)。
这本书的标题是说的“游戏开发”,但本书大量涵盖的内容甚至可以适用于游戏之外的东西。 几乎所有想要模拟、渲染和理解三维世界的人都会觉得这本书很有用。 尽管我们确实尝试提供游戏开发领域的启发性例子,但由于这是我们的专业领域,也是我们主要目标受众, 所以如果你上一部通关的游戏是Space Quest,你就不会被抛弃。1 如果你的目光不仅仅局限于游戏,请放心,本书中不会充斥游戏中关于爆头、断肢或是如何使血液逼真的具体示例。
为什么你应该阅读这本书
本书有许多独特的功能,其中包括话题、方法、作者以及写作风格。
这本书为初学者提供了一个美妙的入门途径, 但这并不意味着我们的会止步于此。 如果按照传统, 这里会有很多材料会被认为是“高级的”, 只会在高年级或是研究生课程中讲授。 但事实上,这些主题的专业性其实超越了其难度, 它们应该成为被提前讲授的重要内容, 而这正是推动对此类书籍需求的一部分。
Ian Parberry博士 在学术界有超过35年的研究和教学经验。 这是他的第六本书,也是关于游戏编程的第三本。 他目前是北德克萨斯大学计算机科学与工程系的终身教授。 他是举世闻名的高等教育游戏编程的先驱之一, 自1993年以来一直在北德克萨斯大学教授游戏编程课程。
你所需要的前置知识
我们尝试让这本书能适合更多读者阅读。但是,这本书显然不能从最基本的公理开始阐述。 我们希望读者具有以下数学技能:
- 运用代数表达式、分数和基本代数定律,如结合律、分配律以及二项式等……
- 了解什么是变量,什么是函数,如何绘制函数的图像等……
- 一些简单的欧几里得二维空间基础,比如什么是点,什么是线,线平行或是垂直的性质等等。 一些地方会使用面积和周长的公式。如果你暂时忘记了这些,那也没关系。只要你在看到它们的时候想起来就好了。
- 最好事先接触三角函数。我们将会在本书的开头对三角函数进行简要的回顾。但在本书的其它地方,没有给出相同程度的解释。
- 事先接触过微积分的读者会有一些优势,但是本书会将对微积分的应用限制在一些基本的法则上。 我们会(尝试)在第11章为没有接受过微积分训练的读者讲授这些知识。 本书只使用最高级的概念和基本的定理。
一些编程知识是有助于学习的,但也不是必需的。 在某些地方,我们给出了简短的代码段,用以展示所讨论的思想如何转换成代码。 (此外,某些过程用代码解释起来也更加容易。) 这些代码片段将十分基础且有着明确注释,只需要对C语言语法(被其它好几种语言参考的)有着最基本的了解即可。 大多数技术美术或是关卡设计师应该能够轻松理解这些片段。
概览
- 第一章 从本书的其余部分所需的一些基础知识(你可能已经了解了一些)开始进行热身。 它回顾了二维以及三维中的笛卡尔坐标系,并讨论了如何使用笛卡尔坐标系来定位空间中的点。 还快速地包括了三角函数以及求和符号的用法。
- 第二章 从数学和空间的角度介绍向量,并研究点和向量之间的重要关系。 它还讨论了许多矢量运算—— 如何执行它们,几何意义上执行它们以及可能会发现它们有用的情况。
- 第三章 讨论坐标空间的例子,并展示如何将其嵌套在层次结构中。 它还介绍了基本向量和坐标空间转换的中心概念。
- 第四章 从代数和空间的角度介绍了矩阵,并说明矩阵是线性变换背后的数的紧凑表示法。
- 第五章 详细研究了不同的线性变换及其对应的矩阵。它还讨论了分类转换的各种方式。
- 第六章 涵盖了矩阵的一些更加有趣(用)的性质, 比如说仿射变换和透视投影, 并解释了三维向量和矩阵在三维世界中的目的和原理。
- 第七章 讨论如何在二维和三维中使用极坐标, 为什么这样做是有效的, 以及如何在极坐标与笛卡尔坐标之间转换。
- 第八章 讨论用于表示三维方向和角位移的不同技术:欧拉角、旋转矩阵、指数映射和四元数。 对于每种方法,都会说明其工作原理,并介绍其优缺点及其应用场景。 最后还会展示如何在不同的表示形式之间转换。
- 第九章 研究了许多常用的几何图元,并讨论如何从数学上表示与操作它们。
- 第十章 这是对图形学的快速教程,涉及一些我们选定的理论以及现代实践问题。 首先,它概述了“图形学的工作原理”,并最终提出了渲染方程。 然后,本章将介绍一些与数学相关的理论话题。 接下来,会讨论两个可能可以引起读者兴趣的现代话题,它通常是数学难题的出处: 骨骼动画与凹凸贴图。 最后,本章将简要介绍实时图形管线, 演示了如何在当前渲染硬件的背景下实现本章上半部分的理论。
- 第十一章 这章会塞入两个相当大的主题——使用你大一学习到的微积分来讨论刚体运动学。 我们会讨论高层次的话题,即如何描述和分析刚体运动, 而不必了解其原理或是与方向或旋转扯上关系。
- 第十二章 从对经典力学的简明解释开始,继续讨论刚体力学。 包括牛顿运动定律和一些基本概念,如惯性、质量、力和动量。 本章将会回顾一些基本的力学定律,如重力、弹力和摩擦力。 本章还考虑了到目前为止讨论的所有线性思想的旋转类似物,并对碰撞这一重要主题给予了应有的重视。 最后本章会讨论使用计算机模拟刚体时可能出现的问题。
- 第十三章 解释了三维的参数曲线。 本章的前半部分会说明一些常见的,用于表示一条较短的曲线的重要形式, 如monomial、Bézier和Hermite。 后半部分则会涉及将一些较短的曲线组合成一条较长的曲线。 称为样条函数(spline)。 为了便于理解每个系统,本章考虑了系统向曲线设计者提供的控件, 如何对设计者制作的曲线进行描述并重新创建曲线, 以及如何使用这些控件来构建具有特定属性的曲线。
- 第十四章 启发读者在游戏中追求更好的技术
- 附录 A 是可以在几何图元上执行的各种有用测试的组合。 我们打算将其作为有用的参考,但也可以使看书变得有趣。
- 附录 B 所有的答案都在这了。3
如何反馈
我们计算了一下可以写出800多页没有错误的数学书的几率。 结果是一个负数,我们知道这是不对的,但可能非常接近了。 如果您发现本书中的错误或有任何反馈, 请发送电子邮件至feedback@gamemath.com或通过 Twitter(@ZPostFacto)与Fletcher联系。
翻译问题请在 Repo 中提出issues。
1. Emmm,你可能听不懂这种笑话,对不起。 2. 这就是为什么我们把大多数笑话和无用的琐事放在脚注里的原因。不过,我觉得我们可以有更好的办法来避免这种情况。 3. 当然是练习题的答案啦。