本站支持尊重有效期内的版权/著作权,所有的资源均来自于互联网网友分享或网盘资源,一旦发现资源涉及侵权,将立即删除。希望所有用户一同监督并反馈问题,如有侵权请联系站长或发送邮件到ebook666@outlook.com,本站将立马改正
本书填补了其他三维游戏开发类书籍在图形、线性代数、模拟和编程等方面留下的空白。本书是学习和掌握三维视频游戏开发技术的一本不可多得的入门读物。
《3D数学基础:图形和游戏开发(第2版)》详细阐述了在计算机图形学中与数学相关的基本解决方案,主要包括笛卡儿坐标系、矢量、多个坐标空间、矩阵简介、矩阵和线性变换、矩阵详解、极坐标系、三维旋转、几何图元、二维图形的数学主题、力学知识以及三维曲线等内容。此外,该书还提供了相应的示例,以帮助读者进一步理解相关方案的实现过程。《3D数学基础:图形和游戏开发(第2版)》适合作为高等院校计算机及相关的教材和教学参考书,也可作为相关开发人员的自学教材和参考手册。
目 录第1章 笛卡儿坐标系1.1 一维数学1.2 二维笛卡儿空间1.2.1 示例:假设的Cartesia城市1.2.2 任意二维坐标空间1.2.3 使用笛卡儿坐标指定二维中的位置1.3 三维笛卡儿空间1.3.1 新增维度和轴1.3.2 在三维中指定位置1.3.3 左手与右手坐标空间1.3.4 本书中使用的一些重要约定1.4 一些零散的基础知识介绍1.4.1 求和与求积的表示法1.4.2 区间符号1.4.3 角度、度数和弧度1.4.4 三角函数1.4.5 三角函数的恒等式1.5 练习第2章 矢量2.1 向量和其他无聊东西的数学定义2.2 矢量的几何定义2.3 使用笛卡儿坐标指定矢量2.3.1 作为位移序列的矢量2.3.2 零矢量2.4 矢量与点2.4.1 相对位置2.4.2 点与矢量之间的关系2.4.3都是相对的2.5 负矢量2.5.1 正式线性代数规则2.5.2 几何解释2.6 标量和矢量的乘法2.6.1 正式线性代数规则2.6.2 几何解释2.7 矢量的加法和减法2.7.1 正式线性代数规则2.7.2 几何解释2.7.3 从一点到另一点的位移矢量2.8 矢量大小2.8.1 正式线性代数规则2.8.2 几何解释2.9 单位矢量2.9.1 正式线性代数规则2.9.2 几何解释2.10 距离公式2.11 矢量点积2.11.1 正式线性代数规则2.11.2 几何解释2.12 矢量叉积2.12.1 正式线性代数规则2.12.2 几何解释2.13 线性代数恒等式2.14 练习第3章 多个坐标空间3.1 为什么需要多个坐标空间?3.2 一些有用的坐标空间3.2.1 世界空间3.2.2 对象空间3.2.3 相机空间3.2.4 直立空间3.3 基矢量和坐标空间转换3.3.1 双重视角3.3.2 指定坐标空间3.3.3 基矢量3.4 嵌套坐标空间3.5 针对直立空间的再解释3.6 练习第4章 矩阵简介4.1 矩阵的数学定义4.1.1 矩阵维度和表示法4.1.2 方形矩阵4.1.3 作为矩阵的矢量4.1.4 矩阵转置4.1.5 矩阵与标量相乘4.1.6 两个矩阵相乘4.1.7 矢量和矩阵相乘4.1.8 行与列矢量4.2 矩阵的几何解释4.3 线性代数的宏大图景4.4 练习第5章 矩阵和线性变换5.1 旋转5.1.1 在二维中的旋转5.1.2 围绕主轴的三维旋转5.1.3 围绕任意轴的三维旋转5.2 缩放5.2.1 沿主轴缩放5.2.2 任意方向的缩放5.3 正交投影5.3.1 投影到主轴或主平面上5.3.2 投影到任意线或平面上5.4 反射5.5 错切5.6 组合变换5.7 变换的分类5.7.1 线性变换5.7.2 仿射变换5.7.3 可逆变换5.7.4 保持角度的变换5.7.5 正交变换5.7.6 刚体变换5.7.7 变换类型总结5.8 练习第6章 矩阵详解6.1 矩阵的行列式6.1.1 关于2×2和3×3矩阵的行列式6.1.2 子矩阵行列式和余子式6.1.3 任意n×n矩阵的行列式6.1.4 行列式的几何解释6.2 逆矩阵6.2.1 经典伴随矩阵6.2.2 逆矩阵—正式线性代数规则6.2.3 逆矩阵—几何解释6.3 正交矩阵6.3.1 正交矩阵—正式线性代数规则6.3.2 正交矩阵—几何解释6.3.3 矩阵的正交化6.4 关于4×4齐次矩阵6.4.1 关于四维齐次空间6.4.2 关于4×4平移矩阵6.4.3 一般仿射变换6.5 关于4×4矩阵和透视投影6.5.1相机6.5.2 透视投影矩阵6.6 练习第7章 极坐标系7.1 关于二维极坐标空间7.1.1 使用二维极坐标定位点7.1.2 别名7.1.3 关于二维中笛卡儿坐标和极坐标之间的变换7.2 为什么有人会使用极坐标?7.3 关于三维极坐标空间7.3.1 圆柱坐标7.3.2 球面坐标7.3.3 在三维虚拟世界中有用的一些极坐标约定7.3.4 球面坐标的别名7.3.5 球面坐标和笛卡儿坐标之间的转换7.4 使用极坐标指定矢量7.5 练习第8章 三维旋转8.1 “定向”含义探微8.2 矩阵形式8.2.1 矩阵的选择8.2.2 方向余弦矩阵8.2.3 矩阵形式的优点8.2.4 矩阵形式的缺点8.2.5 矩阵形式小结8.3 欧拉角8.3.1 欧拉角约定8.3.2 其他欧拉角约定8.3.3 欧拉角的优点8.3.4 欧拉角的缺点8.3.5 欧拉角小结8.4 轴-角和指数映射表示方式8.5 四元数8.5.1 四元数表示法8.5.2 这四个数字的意思8.5.3 四元数变负8.5.4 单位四元数8.5.5 四元数的大小8.5.6 四元数的共轭和逆8.5.7 四元数乘法8.5.8 四元数的“差”8.5.9 四元数点积8.5.10 四元数的对数、指数和标量乘法8.5.11 四元数指数8.5.12 四元数插值8.5.13 四元数的优缺点8.5.14 作为复数的四元数8.5.15 四元数概要8.6 方法比较8.7 表示方式之间的转换8.7.1 将欧拉角转换为矩阵8.7.2 将矩阵转换为欧拉角8.7.3 将四元数转换为矩阵8.7.4 将矩阵转换为四元数8.7.5 将欧拉角转换为四元数8.7.6 将四元数转换为欧拉角8.8 练习第9章 几何图元9.1 表示技术9.2 直线和光线9.2.1 光线9.2.2 直线的特殊二维表示9.2.3 表示方式之间的转换9.3 球体和圆形9.4 包围盒9.4.1 关于AABB的表示方式9.4.2 计算AABB9.4.3 关于AABB与包围球9.4.4 变换AABB9.5 平面9.5.1 平面方程:平面的隐式定义9.5.2 使用3个点定义一个平面9.5.3 超过3个点的“Z佳拟合”平面9.5.4 点到平面的距离9.6 三角形9.6.1 表示法9.6.2 三角形的面积9.6.3 重心空间9.6.4 计算重心坐标9.6.5 特殊点9.7 多边形9.7.1 简单多边形和复杂多边形9.7.2 凸多边形和凹多边形9.7.3 三角剖分和扇形分割9.8 练习第10章 三维图形的数学主题10.1 图形工作原理10.1.1 两种主要的渲染方法10.1.2 描述表面特性:BRDF10.1.3 颜色和辐射度测量简介10.1.4 渲染方程10.2 关于三维视图10.2.1 指定输出窗口10.2.2 像素宽高比10.2.3 视锥体10.2.4 视野和缩放10.2.5 正交投影10.3 坐标空间10.3.1 模型、世界和相机空间10.3.2 裁剪空间和裁剪矩阵10.3.3 裁剪矩阵:准备投影10.3.4 裁剪矩阵:应用缩放并准备裁剪10.3.5 屏幕空间10.3.6 坐标空间概述10.4 多边形网格10.4.1 索引三角网格10.4.2 表面法线10.5 纹理映射10.6 标准局部照明模型10.6.1 标准照明公式:概述10.6.2 镜面反射分量10.6.3 漫反射分量10.6.4 环境光和发光分量10.6.5 照明方程:综合考虑各分量10.6.6 标准模型的局限性10.6.7 平面着色和Gouraud着色10.7 光源10.7.1 标准抽象光类型10.7.2 光衰减10.7.3 关于Doom风格体积光10.7.4 预先计算的照明10.8 骷髅动画10.9 凹凸映射10.9.1 切线空间10.9.2 计算切线空间基矢量10.10 实时图形管道10.10.1 缓冲区10.10.2 传递几何体10.10.3 顶点级别的操作10.10.4 裁剪10.10.5 背面剔除10.10.6 光栅化、着色和输出10.11 一些HLSL示例10.11.1 贴花着色和HLSL基础知识10.11.2 基础的每个像素Blinn-Phong照明10.11.3 使用Gouraud着色算法10.11.4 凹凸映射10.11.5 蒙皮网格10.12 深入阅读建议10.13 练习第11章 力学1:线性运动学和微积分11.1 概述11.1.1 忽略的东西11.1.2 关于宇宙的一些有用的谎言11.2 基本数量和单位11.3 平均速度11.4 瞬时速度和导数11.4.1 极限参数和导数的定义11.4.2 导数示例11.4.3 通过定义计算导数11.4.4 导数的表示法11.4.5 一些求导法则和快捷方式11.4.6 泰勒级数的一些特殊函数的导数11.4.7 链式法则11.5 加速度11.6 恒定加速度下的运动11.7 积分11.7.1 积分的例子11.7.2 导数与积分之间的关系11.7.3 微积分小结11.8 匀速圆周运动11.8.1 平面内的匀速圆周运动11.8.2 三维中的匀速圆周运动11.9 练习第12章 力学2:线性和旋转动力学12.1 牛顿的3个基本定律12.1.1 牛顿的前两个定律:力与质量12.1.2 惯性参考系12.1.3 牛顿第三定律12.2 一些简单的力定律12.2.1 重力12.2.2 摩擦力12.2.3 弹簧力12.3 动量12.3.1 动量守恒12.3.2 质心12.4 冲击力和碰撞12.4.1 完全非弹性碰撞12.4.2 一般碰撞响应12.4.3 关于Dirac Delta12.5 旋转动力学12.5.1 旋转运动学12.5.2 关于二维旋转动力学12.5.3 关于三维旋转动力学12.5.4 与旋转的碰撞响应12.6 实时刚体模拟器12.6.1 物理引擎状态变量12.6.2概述12.6.3 欧拉积分12.6.4 旋转的积分12.7 深入阅读建议12.8 练习第13章 三维曲线13.1 参数多项式曲线13.1.1 参数曲线13.1.2 多项式曲线13.1.3 矩阵表示法13.1.4 两种简单的曲线13.1.5 单项式端点13.1.6 速度和切线13.2 多项式插值13.2.1 艾特肯的算法13.2.2 拉格朗日基多项式13.2.3 多项式插值汇总13.3 埃尔米特曲线13.4 贝塞尔曲线13.4.1 关于de Casteljau算法13.4.2 伯恩斯坦基多项式13.4.3 贝塞尔导数及其与埃尔米特形式的关系13.5 细分13.5.1 细分单项式曲线13.5.2 细分贝塞尔曲线13.6 样条曲线13.6.1 游戏规则13.6.2 节点13.7 埃尔米特和贝塞尔样条曲线13.8 连续性13.8.1 参数连续性13.8.2 几何连续性13.8.3 曲线平滑度13.9 自动切线控制13.9.1 Catmull-Rom样条13.9.2 TCB样条13.9.3 端点条件13.10 练习第14章 后记14.1 接下来做什么14.2 练习附录A 几何A.1 在二维隐式直线上的Z近点A.2 参数化光线上的Z近点A.3 平面上的Z近点A.4 圆或球体上的Z近点A.5 轴向对齐的包围盒中的Z近点A.6 相交A.7 在二维中两条隐式直线的交点A.8 在三维中两条光线的交点A.9 光线和平面的交点A.10 轴向对齐的包围盒与平面的交点A.11 个平面的交点A.12 光线与圆或球体的交点A.13 两个圆或球的交点A.14 球体与轴向对齐的包围盒的交点A.15 球体与平面的交点A.16 光线与三角形的交点A.17 两个AABB的交点A.18 光线与AABB的交点附录B 练习答案B.1 第1章B.2 第2章B.3 第3章B.4 第4章B.5 第5章B.6 第6章B.7 第7章B.8 第8章B.9 第9章B.10 第10章B.11 第11章B.12 第12章B.13 第13章参考文献
前 言
头炮要打响,顺序不重要。
—Who博士,Meglos(1980)
本书适宜的读者范围
本书是关于3D数学、三维空间的几何和代数的入门教材。它旨在告诉你如何使用数学描述三维中的物体及其位置、方向和轨迹。这不是一本关于计算机图形学、模拟,甚至计算几何的书,但是,如果读者打算研究这些科目,那么肯定需要这里的信息。
这是一本适宜视频游戏程序开发人员阅读的图书。虽然本书假定大多数读者都是为了编写视频游戏而学习,但我们期待更广泛的受众,并且在设计这本书的体例时也考虑到了不同的受众。如果你是程序开发人员或有兴趣学习如何制作视频游戏,欢迎加入!如果你没有达到这些标准,那么你在这里仍然可以收获很多。我们已经尽努力使本书对设计师和技术美工也很有用。虽然本书中有一些代码片段,但即使对于非程序开发人员来说,它们也很容易阅读(希望如此)。Z重要的是,虽然你需要先理解相关的概念才能理解代码,但是反过来并不成立。我们使用代码示例来说明如何在计算机上实现创意,而不是解释这些创意本身。
本书的标题有“游戏开发”字样,但我们所涵盖的大量材料适用于视频游戏之外。实际上,任何想要模拟、渲染或理解三维世界的人都会觉得这本书很有用。虽然我们确实尝试提供来自视频游戏开发世界的一些激动人心的示例,因为这是我们的领域以及主要目标受众,但是,如果完成的Z后一个游戏是Space Quest,那么你将不会被排除在外。 如果你的兴趣在于比视频游戏更“成熟”的东西,请放心,这本书中没有关于一枪爆头或残肢断臂之类的视频游戏中的具体示例,也不会讨论如何让血腥画面恰到好处之类的问题。
阅读本书的理由
本书有许多特色,包括其主题、方法、作者和写作风格等。
独特的主题
这本书填补了其他三维游戏开发类书籍在图形、线性代数、模拟和编程等方面留下的空白。这是一本入门教材,这意味着我们的写作重点是提供对基本三维概念的全面阐述—这些主题在一些快速入门网页中通常都会被掩盖,或者降级到其他书籍的附录中,因为有些内容可能会被作者默认为读者已经掌握的基础知识。但是,我们发现这些主题往往是初学者的关键点!在某种程度上,这本书是将图形、物理和曲线等方面的书籍黏合在一起的镜像。我们将首先全面介绍数学基础知识,然后给出应用领域的简明描述。
本书确实试图为初学者提供比较平缓的入门通道,但这并不意味着我们将永远行驶在慢车道上。事实上,这里有很多资料,传统上被认为是“先进的”,并仅在高年级或研究生课程中教授。这些主题的性超过了它们的难度,并且它们Z近成为需要早期教授的重要先决条件,这也是推动对这类图书的需求的一部分动力。
独特的方法
所有作者都认为,为了给读者Z好的阅读体验,需要在一本正经地讲授内容和插科打诨之间取得的平衡,我们也不例外。但是,我们也意识到,有些认真的读者可能会不认同我们的这种自我评价,他们会觉得这本书不太正式。其实,我们专注于明显的解释和直觉的建立,这样做有时也是以牺牲严谨为代价的。我们的目标是简化,但不过度简化。我们将引领读者进入一条能避开巨魔和恶龙的道路,从而顺利抵达终点。但是,我们也知道读者Z终将需要自己穿越山林,因此,在到达我们指引的目的地之后,我们还将转过身来指出危险所在,以帮助读者独闯山林。当然,本书也无法做到面面俱到,所以,有些资料性的工具建议读者通过其他来源获得,这就好比我们已经告诉你闯荡山林的基础知识,但是如果打算扎根山林,则仍然应该咨询当地人以获得更多外人无法通晓的知识,避免可能遇到的危险。这并不是说我们认为严谨是不重要的,我们只是认为在确定了宏观的直觉之后更容易获得严谨的思考和方法,而不是用处理个别案例所需的定义和公理来进行每一项的讨论。坦率地说,现在读者可以在wikipedia.org或Wolfram MathWorld(mathworld. wolfram.com)上阅读到很多简明而正式的演示文稿,所以我们认为任何一本书都不会过多地依赖于定义、公理、证明和边缘情况,特别是主要针对工程师的入门资料。
独特的作者
我们的综合经验使得我们可以将学术理论与在开发人员战壕中的实用建议结合在一起。Fletcher Dunn拥有15年的游戏编程经验,在各种游戏平台上拥有大约十几款游戏。他曾在达拉斯的Terminal Reality工作,担任首席程序员,他是Infernal引擎的架构师和BloodRayne的首席程序员。他曾担任芝加哥Wideload Games的Walt Disney公司的技术总监,以及IGN的E3 2010年度家庭游戏Disney Guilty Party的首席程序员。他目前在华盛顿州贝尔维尤的Valve Software工作。但迄今为止让他声名鹊起的就是Call of Duty:Modern Warfare 2(中文版名称《:现代战争2》)中的Dunn(邓恩)下士的同名。
Ian Parberry博士在学术研究和教学方面拥有超过25年的经验。这是他的第六本书,也是他的第三本关于游戏编程的书。他目前是北德克萨斯大学计算机科学与工程系的终身教授,也是知名的高等教育游戏编程先锋人物之一,自1993年以来一直在北德克萨斯大学教授游戏编程课程。
独特的写作风格
我们希望读者能喜欢阅读这本数学书有两个原因。Z重要的是,我们希望读者能在本书的学习过程中,了解到感兴趣的内容其实也是很有趣的;其次,我们希望读者喜欢阅读本书,就像喜欢阅读文学作品一样。当然我们不奢望能和马克?吐温在同一个层次,或者本书能够成为像The Hitchhiker’s Guide to the Galaxy(中文版译名《银河系漫游指南》)之类的经典之作,但做人做事总要满怀抱负不是?话说回来,无论写作风格如何,对于本书来说,原则应该是明确交流有关电子游戏的数学知识。
阅读本书的基础
我们已经尝试让尽可能多的受众都可以阅读这本书。但是,这一努力也不应该刚才讲过的原则,所以,我们期望读者具备以下基本数学技能:
? 掌握代数表达式、分数和基本代数定律,例如结合律、分配律和二次方程。
? 理解变量是什么、函数是什么,并且知道如何绘制函数的图形等。
? 了解一些非常基本的二维欧几里得几何,例如点是什么、线是什么、平行线和垂直线意味着什么等。在一些地方使用了一些面积和周长的基本公式。如果你暂时忘记了,那也没关系—当你看到它们时,自然会认出它们。
? 事先能掌握三角学是Z好的。我们在本书前面的章节也对三角学进行了一些简要的复习,只是没有给出解释而已。
? 之前接触过微积分的读者会有一些优势,但是我们将本书中对微积分的使用限制在非常基础的水平上,我们将在第 11 章中给那些没有接受过这种教育的读者提供一些基础概念。本书只需要掌握这些概念和基本定律即可。
如果读者具有一些编程知识做基础,那自然是极好的,但这并不是必需的。在一些地方,我们提供简短的代码片段,以展示如何将讨论的想法转化为代码(此外,某些过程在代码中更容易解释)。这些代码片段是非常基础性的,并且提供了很好的注释,读者只需要对C语言语法(也可用于其他几种语言)具有Z基本的理解即可。大多数的技术美工或关卡设计师应该能够轻松理解这些代码片段。
章节内容概述
? 第1章将通过讲述本书其余部分所需的一些基础内容进行热身,这些内容读者可能已经掌握。本章将回顾二维和三维中的笛卡儿坐标系,并讨论如何使用笛卡儿坐标系来定位空间中的点。还包括对三角学和求和符号的快速复习。
? 第2章将介绍数学向量和几何角度的矢量,并研究点和向量(矢量)之间的重要关系。本章还将讨论许多向量运算,如何执行它们,在几何上执行它们的含义以及一些可能发现它们很有用的情况。
? 第3章将讨论坐标空间的示例以及它们如何嵌套在层次结构中。本章还将介绍基矢量和坐标空间变换的核心概念。
? 第4章将从数学和几何角度介绍矩阵,并展示矩阵如何成为线性变换背后数学的紧凑符号。
? 第5章将详细研究不同类型的线性变换及其相应的矩阵。本章还将讨论各种变换的类以及分类方法。
? 第6章将介绍一些有趣且有用的矩阵特性,如仿射变换和透视投影,并解释三维世界中四维矢量和矩阵的目的和作用。
? 第7章将讨论如何在二维和三维中使用极坐标,这样做为什么是有用的,以及如何在极坐标和笛卡儿坐标之间进行转换。
? 第8章将讨论在三维中表示方向和角位移的不同技术—欧拉角、旋转矩阵、指数映射和四元数。对于每种方法,本章解释该方法的工作原理,并介绍该方法的优缺点以及何时使用该方法。本章还显示如何在不同的表示方式之间进行转换。
? 第9章将研究一些常用的几何图元,包括直线、球体、包围盒、平面、三角形和多边形等,并讨论如何用数学方法表示和操作它们。
? 第 10 章是关于图形的快速进阶课程,涉及一些选定的理论和现代实际问题。首 先,本章将阐述关于“图形工作原理”的主题,从而推出渲染方程。然后,本章将介绍一些数学性质的理论主题,包括三维视图、坐标空间和多边形网格等。接下来,它将讨论两个当代主题:骨骼动画和凹凸贴图。这些主题通常是数学难度的来源,读者应该特别感兴趣。Z后,本章还将简要介绍实时图形管道,演示如何在当前渲染硬件的环境下实现本章前半部分的理论。
? 第 11 章将两个相当大的主题合并为一章。它将学期微积分的Z主题与 刚体运动学的讨论联系起来—如何描述和分析刚体的运动,而不必理解其原因或关注方向与旋转。
? 第 12 章将继续讨论刚体力学。它首先对经典力学进行简要的解释,包括牛顿的运动定律和惯性、质量、力和动量等基本概念。它回顾一些基本的力定律,如重力、弹簧力和摩擦力。本章还考虑到目前为止所讨论的所有线性思想的旋转类比,适当关注碰撞的重要主题。本章Z后讨论使用计算机模拟刚体时出现的问题。
? 第 13 章将介绍三维中的参数化曲线。本章的前半部分解释如何以一些常见的重 要形式表示相对较短的曲线—单项式、贝塞尔和埃尔米特。下半部分涉及将这些较短的部分连接成较长的曲线(称为样条曲线)。在理解每个时,本章将考虑提供给曲线设计师的控制,如何描述设计师制作的曲线并重新创建曲线,以及如何使用这些控制构建具有特定属性的曲线等。
? 第14章将激发读者追求在视频游戏方面的成就。
? 附录A是可以对几何图元执行的各种有用。我们的目的是将它作为一个有用的参考,当然,即便是简单浏览一下也是很有益的。
? 附录B包含本书各章练习的所有答案。
小心,我们可不想从中吸取教训。
—摘自Bill Watterson著Calvin And Hobbes(1958—)