本书介绍了开发专业三维图形引擎所需的数学方法,书中介绍的关于游戏开发方面的许多知识同样适用于与三维计算机图形学相关的应用。本书首先介绍了相当基础的知识,如向量几何和线性代数,然后继续介绍一些计算机游戏设计中的高级知识,如光照和可视性判断。另外,本书还给出了一些重要结论的推导过程,以便于不具备相应理论基础的读者理解相关内容。本书要求读者已具备三角学及计算机方法方面的基础知识,不过,本书仍然在一些章节中概括介绍了这些知识中的一些重要工具,如三角恒等式、微分方程和泰勒级数等。本书对于游戏设计者及相应的编程人员来说,是一本不可多得的参考资料。
第1章 向量
1.1 向量的性质
1.2 点积
1.3 叉积
1.4 向量空间
1.5 本章小结
习题
第2章 矩阵
2.1 矩阵的性质
2.2 线性方程组
2.3 逆矩阵
2.4 行列式
2.5 特征值与特征向量
2.6 对角化
2.7 本章小结
习题
第3章 变换
3.1 通用变换
3.1.1 正交矩阵
3.1.2 手向性
3.2 缩放变换
3.3 旋转变换
3.3.1 绕任意轴旋转
3.4 齐次坐标
3.4.1 四维变换
3.4.2 点向量和方向向量
3.4.3 坐标的几何解释
3.5 法向量的变换
3.6 四元数
3.6.1 四元数数学
3.6.2 四元数的旋转
3.6.3 球型线性插值
3.7 本章小结
习题
第4章 三维引擎中的几何
4.1 3D空间中的直线
4.1.1 点到直线的距离
4.1.2 两条直线之间的距离
4.2 3D空间中的平面
4.2.1 直线与平面相交
4.2.2 三个平面相交
4.2.3 平面的变换
4.3 视截体
4.3.1 视城
4.3.2 视截面
4.4 透视校正插值
4.4.1 深度插值(depth interpolation)
4.4.2 顶点属性的插值
4.5 投影
4.5.1 透视投影
4.5.2 正投影
4.5.3 提取视截面
4.6 本章小结
习题
第5章 光线跟踪
5.1 根的求解
5.1.1 二次多项式
5.1.2 三次多项式
5.1.3 四次多项式
5.1.4 牛顿-拉弗森迭代法
5.1.5 倒数与平方根的精化
5.2 曲面交点
5.2.1 光线与三角形相交
5.2.2 光线与长方体相交
5.2.3 光线与球体相交
5.2.4 光线与圆柱面相交
5.2.5 光线与环形圆纹曲面相交
5.3 法向量的计算
5.4 反射向量和折射向量
5.4.1 反射向量的计算
5.4.2 折射向量的计算
5.5 本章小结
习题
第6章 光照
6.1 RGB颜色系统
6.2 光源
6.2.1 环境光
6.2.2 定向光源
6.2.3 点光源
6.2.4 聚焦光源
6.3 漫反射光
6.4 纹理映射
6.4.1 标准纹理图
6.4.2 投影纹理图
6.4.3 立方体纹理图
6.5 镜面反射光
6.6 发射光
6.7 明暗处理
6.7.1 法向量的计算
6.7.2 Gouraud明暗处理
6.7.3 Phong明暗处理
6.8 凹凸映射
6.8.1 凹凸映射图的构造
6.8.2 切线空间
6.8.3 切向量的计算
6.8.4 实现
6.9 物理反射模型
6.9.1 双向反射分布函数
6.9.2 Cook—Torrance光照模型
6.9.3 Fresnel系数
6.9.4 微平面分布函数
6.9.5 几何衰减系数
6.9.6 实现
6.10 本章小结
习题
第7章 可视性判断
7.1 边界体构造
7.1.1 主分量分析
7.1.2 构造边界盒
7.1.3 构造边界球
7.1.4 构造边界椭球
7.1.5 构造边界圆柱
7.2 边界体测试
7.2.1 边界球测试
7.2.2 边界椭球测试
7.2.3 边界圆柱测试
7.2.4 边界盒测试
7.3 空间分割
7.3.1 八叉树
7.3.2 二叉空间分割树
7.4 门系统
7.4.1 门裁剪
7.4.2 缩小视平截体
7.5 本章小结
习题
第8章 碰撞检测
8.1 环境碰撞
8.1.1 球体与平面的碰撞
8.1.2 长方体与平面的碰撞
8.1.3 空间分割
8.2 物体碰撞
8.2.1 两个球体之间的碰撞
8.2.2 球体与长方体的碰撞
8.2.3 长方体之间的碰撞
8.3 本章小结
习题
第9章 多边形技术
9.1 深度值修正
9.1.1 修改投影矩阵
9.1.2 修正值的选择
9.1.3 应用举例
9.2 贴图
9.2.1 贴图网格
9.2.2 多边形裁剪
9.3 公告牌技术
9.3.1 无约束四边形
9.3.2 约束四边形
9.3.3 四边形带
9.4 模板阴影
9.4.1 构造边表
9.4.2 阴影渲染
9.4.3 实现
9.5 多边形简化
9.6 本章小结
习题
第10章 线性物理运动
10.1 位置方程
10.2 二阶微分方程
10.2.1 齐次方程
10.2.2 非齐次方程
10.2.3 初始条件
10.3 抛物运动
10.4 阻厄运动
10.5 摩擦力
10.6 本章小结
习题
第11章 旋转物理运动
11.1 旋转环境
11.1.1 角速度
11.1.2 离心力
11.1.3 科里奥利力
11.2 刚体运动
11.2.1 质心
11.2.2 角动量和扭矩
11.2.3 惯性张量
11.2.4 主惯性轴
11.3 振动
11.3.1 弹性运动
11.3.2 钟摆运动
11.4 本章小结
习题
第12章 流体仿真
12.1 波方程
12.2 近似导数
12.3 计算表面位移
12.4 算法实现
12.5 本章小结
习题
附录A 复数
附录B 三角恒等式
附录C 坐标系
附录D 泰勒级数
附录E 习题答案
参考文献
本书介绍了开发专业级三维图形引擎所需的数学方法。为了对一些技术主题进行完整阐述,以及对游戏设计者使用数学工具内部的计算方法进行深入了解,本书对一些重要结论的推导进行了详细说明。
本书中所介绍的大部分内容与渲染图像所用的三维图形系统无关,但读者应熟悉使用三维图形库的基本原理,并且掌握如何由顶点和多边形构造模型的方法。在书中的一些地方,为了说明如何用图形库产生某些特殊效果,用到一些OpenGL中的实现方法。在第6章中,提供了执行特殊光照计算的不同顶点程序。这些程序使用了现代图形硬件支持的向量指令集,并且遵循OpenGL的扩展函数GL-NV-vertex-program规范。
本书每一章的结尾都对该章中出现的重要方程和公式进行了总结,用以作为快速参考工具。读者利用它们可以快速地找到结果,而不必将该结果的推导过程一一阅读完。每一章还提供了一些习题,其中需要计算的习题答案在附录E中给出。
内容概要
第1章:向量 首先回顾了向量的定义及其性质、向量是研究三维计算机图形学的基本要素。书中用到了大量的向量运算,如点积和叉积。
第2章:矩阵 对矩阵的掌握是三维游戏编程中另一基本要素。本章讨论了一些矩阵的基本理论,如线性方程组的矩阵表示,以及一些高级知识,如特征向量和矩阵的对角化问题。
第3章:变换 本章以矩阵为工具进行变换操作,如平移、旋转以及比例缩放。同时介绍了四维齐次坐标理论,该理论广泛地用于三维图形系统中不同坐标系之间的变换。此外还介绍了四元组的性质以及作为变换根工具的用途。
第4章:三维引擎中的几何 从本章开始,我们才看到前3章中介绍的方法应用到三维游戏编程和计算机图形学的实际问题的求解。在分析了三维空间中的面和线后,本章介绍了视平截体以及它与虚拟相机(即观察点)之间的关系,探讨了包含视野、投影校正插值以及投影矩阵在内的一些内容。
第5章:光线跟踪 光线跟踪算法在游戏编程的许多领域得到应用,如Light-map光图的生成。视线判断以及碰撞检测等。本章首先介绍了计算方程的解析根和数值根的技术,然后给出了光线与一般几何体的求交方法,最后讨论了光反射与折射的计算方法。
第6章:光照 本章讨论了与照明和阴影相关的众多主内容。首先列举了各种各样的光源,然后介绍了简单反射模型,接着分析了描述渲染表面细节的技术,即纹理映射、光泽映射以及凹凸映射。最后,详细解释了Cook-Torrance物理光照模型。
第7章:可视性判断 三维引擎的性能主要决定于其判断场景中哪些内容是可见的能力。本章介绍了构造不同的边界体的方法以及与视平截体之间的可视性判断方法。应用于大规模可视性判断的空间分割法和门系统法等。
第8章:碰撞检测 在游戏世界中,碰撞检测对于不同对象之间的交互是必需的。本章提供了检测运动物体与静止环境之间以及运动物体之间的碰撞检测方法。
第9章:多边形技术 本章提供了操纵多边形模型的几个常用技术,如在任意表面进行贴图的技术。相应的顶点深度补偿方法。还介绍了产生不同特效的公告牌技术、利用模板缓冲区的阴影产生技术以及多边形化简技术。
第10章:线性物理运动 从这一章开始本书用两章的篇幅介绍经典物理学中与运动相关的内容。三维游戏中的对象都是通过运动来展示自己的。本章首先介绍了位置函数以及二阶微分方程的解,然后分析了真空中和有阻力空间中的抛物运动,最后介绍摩擦力对运动的影响。
第11章:旋转物理运动 本章继续阐述运动中更高级的问题--旋转运动。首先介绍了旋转系统中物体受到的力,然后分析刚体运动并利用惯性张力推导出角速度与角动量之间的关系,最后简单介绍了弹簧和钟摆的振荡运动。
第12章:流体仿真 本书最后给出了基于二维波动方程的流体运动的物理模型,并提供了计算表示流体表面的规则栅格中一个顶点位置的方法,同时讨论了解收敛的必要条件。
附录A:复数 介绍了复数的几个基本原理以及本书用到复数的几个性质。
附录B:三角恒等式 给出了三角函数以及本书中用到的几个三角等式和三角恒等式。
附录C:坐标系 简单回顾了圆柱坐标系和球坐标系。这些坐标系的应用出现在本书的几个地方,在第11章用的最多。
附录D:泰勒级数 给出了泰勒级数的推导过程以及多个常用函数的幂级数。
附录E:习题答案 给出了每章节末习题中的计算题的答案。