《3D数学基础 图形与游戏开发》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:(美)Fletcher Dunn,(美)Ian Parberry著;史银雪,陈洪,王荣静译
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2005
  • ISBN:730210946X
  • 页数:380 页
图书介绍:游戏开发是一种新兴的行业,在游戏开发中无时无刻不需要利用引“数学”这种工具。本书的内容是关于3D数学的,研究隐藏在3D几何世界背后的数学问题。本书涵盖了理论知识和C++实现代课理论部分解释了3D世界中数学和几体的关系,书中还列出了许多技巧与公式可供读者参考。

目录 1

第1章 简介 1

1.1 什么是3D数学 1

1.2 为什么选择本书 1

1.3 阅读本书需要的基础知识 2

1.4 概览 3

第2章 笛卡尔坐标系统 4

2.1 1D数学 5

2.2.1 笛卡尔坐标系的实例:假想中的笛卡尔城 7

2.2 2D笛卡尔数学 7

2.2.2 任意2D坐标系 8

2.2.3 在2D笛卡尔坐标系中定位点 10

2.3 从2D到3D 11

2.3.1 第三个维度,第三个轴 11

2.3.2 在3D笛卡尔坐标系中定位点 12

2.3.3 左手坐标系与右手坐标系 13

2.3.4 本书的重要约定 15

2.4 练习 16

3.1 为什么要使用多坐标系 17

第3章 多坐标系 17

3.2 一些有用的坐标系 18

3.2.1 世界坐标系 19

3.2.2 物体坐标系 19

3.2.3 摄像机坐标系 20

3.2.4 惯性坐标系 21

3.3 嵌套式坐标系 22

3.4 描述坐标系 23

3.5 坐标系转换 23

3.6 练习 25

第4章 向量 26

4.1 向量——数学定义 26

4.1.1 向量与标量 27

4.1.2 向量的维度 27

4.1.3 记法 27

4.2 向量——几何定义 28

4.2.1 向量的形式 28

4.2.2 位置与位移 29

4.2.3 向量的表达 29

4.2.4 将向量表示为位移序列 30

4.3.1 相对位置 31

4.3.2 点和向量的关系 31

4.3 向量与点 31

4.4 练习 32

第5章 向量运算 34

5.1 线性代数与几何 34

5.2 符号约定 35

5.3 零向量 35

5.4.1 运算法则 36

5.4 负向量 36

5.4.2 几何解释 37

5.5 向量大小(长度或模) 37

5.5.1 运算法则 38

5.5.2 几何解释 38

5.6 标量与向量的乘法 39

5.6.1 运算法则 39

5.6.2 几何解释 40

5.7.1 运算法则 41

5.7.2 几何解释 41

5.7 标准化向量 41

5.8 向量的加法和减法 42

5.8.1 运算法则 42

5.8.2 几何解释 43

5.8.3 一个点到另一个点的向量 45

5.9 距离公式 46

5.10 向量点乘 47

5.10.1 运算法则 47

5.10.2 几何解释 48

5.10.3 向量投影 49

5.11 向量叉乘 50

5.11.1 运算法则 50

5.11.2 几何解释 51

5.12 线性代数公式 53

5.13 练习 54

第6章 3D向量类 57

6.1 类接口 57

6.2 Vector3类 58

6.3 设计决策 60

6.3.2 运算符重载 61

6.3.3 仅提供最重要的操作 61

6.3.1 float与double 61

6.3.4 不要重载过多的运算符 62

6.3.5 使用const成员函数 62

6.3.6 使用const引用参数 62

6.3.7 成员函数与非成员函数 63

6.3.8 无缺省初始化 64

6.3.9 不要使用虚函数 64

6.3.10 不要使用信息屏蔽 64

6.3.13 关于优化 65

6.3.12 不存在“Point3”类 65

6.3.11 全局常量:零 65

第7章 矩阵 69

7.1 矩阵——数学定义 69

7.1.1 矩阵的维度和记法 69

7.1.2 方阵 70

7.1.3 向量作为矩阵使用 71

7.1.4 转置 71

7.1.5 标量和矩阵的乘法 72

7.1.6 矩阵乘法 72

7.1.7 向量与矩阵的乘法 75

7.1.8 行向量与列向量 76

7.2 矩阵——几何解释 77

7.2.1 矩阵是怎样变换向量的 77

7.2.2 矩阵的形式 79

7.2.3 总结 82

7.3 练习 83

第8章 矩阵和线性变换 85

8.1 变换物体与变换坐标系 85

8.2.1 2D中的旋转 88

8.2 旋转 88

8.2.2 3D中绕坐标轴的旋转 89

8.2.3 3D中绕任意轴的旋转 91

8.3 缩放 94

8.3.1 沿坐标轴的缩放 94

8.3.2 沿任意方向缩放 96

8.4 正交投影 99

8.4.1 向坐标轴或平面上投影 99

8.4.2 向任意直线或平面投影 100

8.5 镜像 101

8.6 切变 102

8.7 变换的组合 103

8.8 变换分类 104

8.8.1 线性变换 105

8.8.2 仿射变换 105

8.8.3 可逆变换 106

8.8.4 等角变换 106

8.8.5 正交变换 106

8.8.6 刚体变换 106

8.8.7 变换类型小结 107

8.9 练习 107

9.1.1 线性运算法则 109

第9章 矩阵的更多知识 109

9.1 矩阵的行列式 109

9.1.2 几何解释 113

9.2 矩阵的逆 114

9.2.1 运算法则 114

9.2.2 几何解释 115

9.3 正交矩阵 116

9.3.1 运算法则 116

9.3.2 几何解释 116

9.3.3 矩阵正交化 118

9.4 4×4齐次矩阵 119

9.4.1 4D齐次空间 119

9.4.2 4×4平移矩阵 120

9.4.3 一般仿射变换 123

9.4.4 透视投影 124

9.4.5 小孔成像 125

9.4.6 使用4×4矩阵进行透视投影 127

9.5 练习 128

10.1 什么是方位? 130

第10章 3D中的方位与角位移 130

10.2 矩阵形式 132

10.2.1 用哪个矩阵 132

10.2.2 矩阵形式的优点 133

10.2.3 矩阵形式的缺点 133

10.2.4 小结 134

10.3 欧拉角 135

10.3.1 什么是欧拉角 135

10.3.2 关于欧拉角的其他约定 137

10.3.3 欧拉角的优点 137

10.3.4 欧拉角的缺点 138

10.3.5 总结 140

10.4 四元数 141

10.4.1 四元数记法 141

10.4.2 四元数与复数 142

10.4.3 四元数和轴—角对 144

10.4.4 负四元数 144

10.4.5 单位四元数 145

10.4.6 四元数的模 145

10.4.8 四元数乘法(叉乘) 146

10.4.7 四元数共轭和逆 146

10.4.9 四元数“差” 150

10.4.10 四元数点乘 151

10.4.11 四元数的对数、指数和标量乘运算 151

10.4.12 四元数求幂 152

10.4.13 四元数插值——“slerp” 154

10.4.14 四元数样条——“squad” 157

10.4.15 四元数的优点和缺点 158

10.5 各方法比较 159

10.6.1 从欧拉角转换到矩阵 160

10.6 表达形式之间的转换 160

10.6.2 从矩阵转换到欧拉角 162

10.6.3 从四元数转换到矩阵 165

10.6.4 从矩阵转换到四元数 167

10.6.5 从欧拉角转换到四元数 170

10.6.6 从四元数转换到欧拉角 171

10.7 练习 173

第11章 C++实现 175

11.1 概述 175

11.2 EulerAngles类 178

11.3 Quaternion类 186

11.4 RotationMatrix类 198

11.5 Matrix4×3类 204

第12章 几何图元 225

12.1 表示方法 225

12.1.1 隐式表示 225

12.1.2 参数形式表示 226

12.1.3 “直接”形式表示 226

12.1.4 自由度 227

12.2 直线和射线 227

12.2.2 射线的参数形式 228

12.2.1 两点表示法 228

12.2.3 特殊的2D直线表示方法 229

12.2.4 在不同表示方法间转换 230

12.3 球和圆 232

12.4 矩形边界框 233

12.4.1 AABB的表达方法 234

12.4.2 计算AABB 235

12.4.3 AABB与边界球 236

12.4.4 变换AABB 236

12.5.1 平面方程——隐式定义 238

12.5 平面 238

12.5.2 用三个点定义 239

12.5.3 多于三个点的“最佳”平面 240

12.5.4 点到平面的距离 242

12.6 三角形 242

12.6.1 基本性质 242

12.6.2 面积 244

12.6.3 重心坐标空间 246

12.6.4 特殊点 252

12.7.1 简单多边形与复杂多边形 255

12.7 多边形 255

12.7.2 自相交多边形 256

12.7.3 凸多边形与凹多边形 256

12.7.4 三角分解和扇形分解 260

12.8 练习 261

第13章 几何检测 262

13.1 2D隐式直线上的最近点 262

13.2 参数射线上的最近点 263

13.3 平面上的最近点 264

13.4 圆或球上的最近点 264

13.5 AABB上的最近点 265

13.6 相交性检测 266

13.7 在2D中两条隐式直线的相交性检测 266

13.8 在3D中两条射线的相交性检测 267

13.9 射线和平面的相交性检测 269

13.10 AABB和平面的相交性检测 270

13.11 三个平面间的相交性检测 270

13.12 射线和圆/球的相交性检测 271

13.13 两个圆/球的相交性检测 273

13.14 球和AABB的相交性检测 275

13.15 球和平面的相交性检测 276

13.16 射线和三角形的相交性检测 277

13.18 两个AABB的相交性检测 281

13.17 射线和AABB的相交性检测 281

13.19 其他种类的检测 283

13.20 AABB3类 283

13.21 练习 298

第14章 三角网格 300

14.1 表示网格 301

14.1.1 索引三角网格 301

14.1.3 针对渲染的特殊表达 302

14.1.2 高级技术 302

14.1.4 顶点缓存 303

14.1.5 三角带 303

14.1.6 三角扇 306

14.2 额外信息 307

14.2.1 纹理映射坐标 307

14.2.2 表面法向量 307

14.2.3 光照值 308

14.4 三角网格操作 309

14.4.1 逐片操作 309

14.3 拓扑与一致性 309

14.4.2 焊接顶点 310

14.4.3 面拆分 312

14.4.4 边缩坍 312

14.4.5 网格消减 313

14.5 C++三角网格类 313

第15章 图形数学 319

15.1 图形管道概述 320

15.2.1 指定输出窗口 322

15.2 设定视图参数 322

15.2.2 像素纵横比 323

15.2.3 视锥 324

15.2.4 视场与缩放 324

15.3 坐标空间 326

15.3.1 模型与世界空间 326

15.3.2 摄像机空间 326

15.3.3 裁剪空间 327

15.3.4 屏幕空间 329

15.4 光照与雾化 330

15.4.1 色彩的数学 330

15.4.2 光源 331

15.4.3 标准光照方程——概述 333

15.4.4 镜面反射分量 333

15.4.5 漫反射分量 336

15.4.6 环境光分量 337

15.4.7 光的衰减 338

15.4.8 光照方程——合成 338

15.4.9 雾化 339

15.4.10 flat着色与Gourand着色 341

15.5 缓存 342

15.6 纹理映射 343

15.7 几何体的生成与提交 344

15.7.1 LOD选择与渐进式生成 344

15.7.2 向API投送几何体 345

15.8 变换和光照 347

15.8.1 变换到裁剪空间 347

15.8.2 顶点光照 348

15.9 背面剔除与裁剪 349

15.9.1 背面剔除 349

15.9.2 裁剪 350

15.10 光栅化 352

第16章 可见性检测 353

16.1 包围体检测 354

16.1.1 基于视锥的检测 354

16.1.2 遮断检测 357

16.2 空间分割技术 357

16.3 网格系统 358

16.4 四叉树和八叉树 360

16.5 BSP树 364

16.5.2 任意分割面 366

16.5.1 经典BSP 366

16.6 遮断剔除 367

16.6.1 潜在可见集 367

16.6.2 Portal技术 368

第17章 后记 372

附录A 简单的数学概念 373

A.1 求和记法 373

A.2 角度,度和弧度 373

A.3 三角函数 374

A.4 三角公式 377

附录B 参考文献 379