译者序计算机图形及游戏开发技术是一门与数学紧密相关的技术。正由于拥有强大的数学理论后盾,计算机模拟的虚拟世界才可以像今天这样逼真。数学在计算机图形及游戏开发中占有重要的位置,将游戏数学单独进行讲解也成为需要。本书着重讲解与计算机图形及游戏开发相关的数学知识,重点放在3D数学上。3D数学是一门和计算几何相关的学科,主要研究怎样用数值方法解决几何问题。3D数学和计算几何广泛应用在图形及游戏开发领域中,如图形变换、物理仿真等本书首先介绍基本的代数和儿何知识,其中包括向量、矩阵、四元数、几何变换等相关内容:在此基础上,进一步介纽与计算机游戏开发相关的数学知识,其中包括几何图元的碰撞检测、三角形网格的实现、可见性判断等内容。由于本书是一木和计算机紧密结合的技术性书籍,因此本书在对相关数学知识进行讨论的同时,还给出相应的C++实现代码通过本书的学习,用户可以掌握计算机游戏开发中常用的数学方法及相关公式,并能为进一步学习高级开发技术打下基础。计算机图形及游戏数学是一门复杂的学科,因此在进入本书的学习之前读者需要具备定的代数和几何学基础。本书可以作为计算机游戏开发人员使用的参考用书,也可以作为计算机游戏初学者的入门书籍。由于译者水平有限,错误在所难免,对于书中叙述不清,讲解有误的地方,欢迎读者批评指正。大家可以利用中国游戏开发者联盟网站htt:/ ww.cngda com进行沟通与交流。感谢北京递归开元教育科技有限公司提供的机会与平台,感谢家人以及业界的朋友在本书编写过程中给予我们的支持和帮助,这里还要特别感谢任小宇、李巍、郑砚、张启竣,在本书翻译过程中提出了非常宝贵的意见,希望我们的绵薄之力能够促进中国游戏产业的发展。译者于北京绿园2005年5月目录第1章简介3.5坐标系转换……231.1什么是3D数学36练习2512为什么选择本书第4章向量2613阅读本书需要的基础知识…1241向量—数学定义2614概览41.1向量与标量.……27第2章笛卡尔坐标系统4.1.2向量的维度27重由a看目目器审■4.13记法211D数学4.2向量—几何定义222D笛卡尔数学……4.2.1向量的形式是吾++出普份十世音世+世世当t分28221笛卡尔坐标系的实例:422位置与位移….29假想中的笛卡尔城4.2.3向量的表达…29222任意2D坐标系84,24将向量表示为位移序列3022.3在2D笛卡尔坐标系中4.3向量与点31定位点104.3.1相对位置3123从2D到3D.……11432点和向量的关系……31231第三个维度,第三个轴吾+b是+普44练习…32232在3D笛卡尔坐标系中第5章向量运算…34定位点1251线性代数与几何34233左手坐标系与右手坐标系…1352符号约定4吾删暨着斗普吾量吾世世+当世量世曾量量t35234本书的重要约定……1553零向量35练习.…1654负向量36第3章多坐标系…国日国吾++吾是+是+量1754.1运算法则3631为什么要使用多坐标系17542几何解释.3732一些有用的坐标系1855向量大小(长度或模)……平中干平导珊吾导干37士甘+世世321世界坐标系…19551运算法则…383.22物体坐标系19552几何解释,………38323摄像机坐标系……2056标量与向量的乘法自看由着着日串面日自由画39324惯性坐标系….5.6.1运算法则..3933嵌套式坐标系.…562几何解释402234描述坐标系…2357标准化向量5.7.1运算法则←+4;++音+日加孟41V3D数学基础:图形与游戏开发5.7.2几何解释41711矩阵的维度和记法……,6958向量的加法和减法7.12方阵日+-+日+量出+出量-B寻吾县4斗寻寻丰善470581运算法则.427.13向量作为矩阵使用.71582几何解释.43714转置…7158.3一个点到另一个点的向量45715标量和矩阵的乘法…7259距离公式……71.6矩阵乘法72…46510向量点乘7.17向量与矩阵的乘法75审aa++普平卡吾甚事甚喜是着5.10.1运算法则,…4771.8行向量与列向量7672矩阵——几何解释5.10.2几何解释t量世量音+士音中“+干吾日日「48510.3向量投影721矩阵是怎样变换向量的511向量叉乘…50722矩阵的形式723总结8325.1.1运算法则世吾当吾吾导由中着中目目市7,3练习….83511.2几何解释哪“5152线性代数公式………3第巳章矩阵和线性变换513练习和审由日如宝首十世生世5481变换物体与变换坐标系85第6章3D向量类…82旋转578212D中的旋转8861类接口…578223D中绕坐标轴的旋转8962 Vector3类588233D中绕任意轴的旋转…9163设计决策.6083缩放申申t“面出94631 float与 double+61831沿巫标轴的缩放6.32运算符重载61832沿任意方向缩放63仅提供最重要的操作16184正交投影…99634不要重载过多的运算符……62841向坐标轴或平面上投影…635使用cont成员函数.…62842向任意直线或平面投影…10063.6使用 const引用参数……6285镜像…101637成员函数与非成员函数…6386切变102638无缺省初始化……87变换的组合……103639不要使用虚函数88变换分类…,…63.10不要使用信息屏蔽…64881线性变换.1056.311全局常量:零…65882仿射变换1056312不存在“Pon”类……,65883可逆变换884等角变换…10663.13关于优化…65885正交变换…电菲重面出量于是申106第7章矩阵88.6刚体变换...…7!矩阵—数学定义…号吾开;由鲁中中·手887变换类型小结.107目录V89练习107104四元数141第9章矩阵的更多知识.1091041四元数记法…1491矩阵的行列式I091042四元数与复数…1429l.1线性运算法则.11091043四元数和轴一角对…144912几何解释1131044负四元数14492矩阵的逆.…111141045单位四元数1459.2,1运算法则114104.6四元数的模,…率电即非申审市身着申申n,145922几何解释.…151047四元数共轭和逆.…14693正交矩阵…116104.8四元数乘法(叉乘)14693!运算法则.1161049四元数“差”……150932几何解释.…11610410四元数点乘151933矩阵正交化.118104l1四元数的对数、指数和944×4齐次矩阵.19标量乘运算牛量当普七十是量计吾1519414D齐次空间11910412四元数求幂15294.24×4平移矩阵…120104.13四元数插值“ slerp”.154943一般仿射变换…12310414四元数样条944透视投影吾平+日寻吾■罪是丰面al24“ squad"…,…,,…157945小孔成像…12510415四元数的优点和缺点…158946使用4×4矩阵进行105各方法比较4159透视投影……12710.6表达形式之间的转换,,….16095练习1280.61从欧拉角转换到矩阵第10章30中的方位与角位移1301062从矩阵转换到欧拉角rate16210.1什么是方位?…130063从四元数转换到矩阵165102矩阵形式…1321064从矩阵转换到四元数1671021用哪个矩阵.…132106.5从欧拉角转换到四元数.17010.22矩阵形式的优点…13310.6.6从四元数转换到欧拉角….1711023矩阵形式的缺点…13310.7练习17310.24小结丰着和福1目品率目目中哲134第11章G++实现175103欧拉角…135111概述17510.3.1什么是欧拉角…1351.2 EulerAngles类17810.32关于欧拉角的其他约定…13711.3 Quaternion类1861033欧拉角的优点…137114 Rotation matrix类…:1111981034欧拉角的缺点…138115 Matrix4×3类·中中20410.3.5总结…140ⅥI3D数学基础:图形与游戏开发第12章几何图元…25第13章几何检测262121表小方法…251312D隐式直线上的最近点.…126212.1.1隐式表示.225132参数射线上的最近点……263121.2参数形式表示……226133平面上的最近点……1261213“直接”形式表示…26134圆或球上的最近点2641214自由度…27135AABB上的最近点122直线和射线……2713.6相交性检测,…2661221两点表示法228137在2D中两条隐式直线的1222射线的参数形式…228相交性检测.2661223特殊的2D直线表示方法22913.8在3D中两条射线的相交性检测…2671224在不同表示方法间转换…230139射线和平面的相交性检测.269123球和圆.123213.10AABB和平面的相交性检测…270124矩形边界框23313.11三个平面间的相交性检测…27024.1AABB的表达方法…2341312射线和圆球的相交性检测.2711242计算AABB.123513.13两个圆/球的相交性检测…731243AABB与边界球.2361314球和AABB的相交性检测.…1275l244变换AABB2361315球和平面的相交性检测…276125平面23813.16射线和三角形的相交性检测.…2771251平面方程—隐式定义…23813.17射线和AABB的相交性检测…2811252用三个点定义日tmmmt由+日m2391318两个AABB的相交性检测…2811253多于三个点的13.19其他种类的检测,…283“最佳”平面.…2401320AABB3类1254点到平面的距离,2421321练习…298126三角形242第14章三角网格·t量mt量a如吾十册4m当吾晋平出吾场F30012.6.1基本性质…24214.1表示网格12.6.2面积.141.1索引三角网格.130112.6.3重心坐标空间.24614.12高级技术…牛事→中丰3021264特殊点.当中当是干平世+证g寻寻25214.13针对渲染的特殊表达302127多边形…2551414顶点缓存….13031271简单多边形与复杂1415三角带303多边形….25514.16三角扇306127.2自相交多边形…256142额外信息…30712.73凸多边形与凹多边形256142.l纹理映射坐标…30712.74三角分解和扇形分解……260142,2表面法向量,1307128练习,261目录l1423光照值308155缓存342143拓扑与一致性…309156纹理映射,343144三角网格操作309157几何体的生成与提交144.1逐片操作,…3091571LOD选择与渐进式生成…34414.42焊接顶点…13101572向API投送几何体345144.3面拆分“书私“喜丰312158变换和光照…13471444边缩坍血出甘吾首重+吾卡31215.81变换到裁剪空间…3471445网格消减.31315.82顶点光照…114814.5C++三角网格类313159背面剔除与裁剪.…349第15章图形数学3I91591背面剔除…3491592裁剪…350151图形管道概述32015.10光栅化l52设定视图参数+十 nI::+++册+b吾寻干日国日丰日干斗干甲和352322152,1指定输出窗口…322第16章可见性检测3531522像素纵横比……32316.1包围体检测3541523视锥…1324161.1基于视锥的检测…3541524视场与缩放…1324161.2遮断检测.37153坐标空间…326162空间分割技术.…35715.3.1模型与世界空间.…326163网格系统....135815.32摄像机空间。a塞十mt量世十日326164四叉树和八叉树……13601533裁剪空间327165BsP树3641534屏幕空间3291651经典BSP…t中,aa由154光照与雾化…3301652任意分割面.366154l色彩的数学…30166遮断剔除…3671542光源3311661潜在可见集…1367543标准光照方程——概述……3331662 Portal技术…13681544镜面反射分量…333第17章后记…1372154.5漫反射分量.…336附录A简单的数学概念37315.46环境光分量……3371547光的衰减……338A.1求和记法3731548光照方程—合成138A.2角度,度和弧度3731549雾化.339A.3三角函数374154.10fat着色与 GourandA4三角公式377着色…申目申申国341附录B参考文献.简介1.1什么是3D数学本书将研究隐藏在3D几何世界背后的数学问题—3D数学3D数学是一门和计算几何相关的学科,计算几何则是研究用数值方法解决几何间题的学科。这两门学科广泛应用于那些使用计算机来模拟3D世界的领域,如图形学、游戏、仿真、机器人技术、虚拟现实和动画等等。本书包含理论知识和用C++语言实现的示例代码两部分。理论知识部分解释3D领域中数学和几何之间的关系,这部分还可作为相关技巧与公式的参考手册。示例实现部分则演示了怎样通过编写代码来实现这些理论概念。示例中的编程语言使用C++,但本书所介绍的理论技术能用任何编程语言实现。本书并不是讲解计算机图形学、仿真、或计算几何的专著。但如果您打算学习这些学科,那么您有必要首先了解本书所介绍的内容是必要的。12为什么选择本书如果您打算学习3D数学并用于编写游戏或图形程序,那么本书就是为您而准备的。市场上已经有许多书承诺能教会您如何制作一款游戏或如何把图像显示到屏幕上,那么为什么还要选择本书呢?因为本书有许多独一无二的优点。独一无二的主题:本书填补了讲解图形学、线性代数和编程之间关系的空白。首先这是本入门书,意味着我们将集中精力介绍基本的3D概念一一而其他书往往是以很小的篇幅或仅在附录中对3D概念进行简要介绍(作者通常假设读者已经具备了这些知识)所以本书的定位是:学习编写游戏或图形程序时应该读的第一本书。其次,本书还可以当做参考手册使用,您可以先通读一遍全文,等以后需要时再查阅具体的内容。23D数学基础:图形与游戏开发独一无二的讲解方法:本书通过三个方面来讲解:数学、几何和代码。数学部分列出了些方程和公式,许多书讲解到这里就止步了。但为了使数学部分的学习更有效,我们还需具备认识数学怎样和几何相互联系的直觉。本书将以多个例子来展示数学和几何的联系,如3D定位、矩阵乘法和四元数。有了直观印象后,接着就是具体的代码实现部分。本书给出了实际可用的代码示例,以使您学习3D数学编程更加直观容易。独一无二的作者:本书是实际经验与学术权威的结合。 Fletcher dunn有六年的专业游戏编程经验,在不同游戏平台上发表过多个作品。他现在是 Terminal Reality公司的首席程序员,BloodRayne项目的领导者。 Lan Arberry博士有18年的相关学术研究和大学教学经验。本书是他的第六本书,也是第三本讲解游戏编程的书。他现在是北德克萨斯大学计算机科学系的终身教授,高等教育界著名的游戏教育先锋。从1993年起,他就在北德克萨斯大学向本科生讲授游戏开发课程。独一无二的插图:仅仅依靠阅读文字和公式就能学会3D数学几乎是不可能的,本书提供了很多插图助您思考。粗略翻一下本书,会发现几乎每页都有插图,而且插图经常出现在公式和代码的旁边,我们不仅“讲述”3D数学,还通过插图“展示”给读者。总之,本书贯彻了将数学概念、几何直观表示和代码实现结合在一起讲述的风格独一无二的代码:本书代码中的类被设计成可以完成菜些特定任务,并且易于理解、不会被误用。因为它们简单而且重点分明,您很容易通过一次尝试就让它成功运行。许多书中使用了错误的类设计思想—提供了所有可能的操作,但只有很小一部分才是实际工作中会用到的。独一无二的写作风格:我们的写作风格通俗易懂,富于趣味性,但有时为了表达清晰,语言就会比较正规并力图表达准确。我们想用有趣的例子来激发读者的兴趣,绝不单纯是为了幽默。独一无二的网站:本书没有附带光盘。光盘成本较高并且一旦发行就不能再更新。我们制作了一个帮助网站:www.cngda.com。在那里可以浏览一些交互式的例子,以使读者能更好地理解那些很难从字面和插图中领悟的概念。可以从网站上下载代码(包括所有漏洞补丁)和有用的工具,也可以在上面找到习题答案和其他关于3D数学、图形和编程的网站链接。1.3阅读本书需要的基础知识要学习本书的理论部分,读者需要具备一些基本的代数和几何知识,包括:代数表达式变换代数运算法则,如结合律、分配律函数和变量基本的2D欧几里德几何知识