第1部分 动态仿真 3
1 动态仿真 3
1.1 简介 3
1.2 粒子和刚体系统 4
1.3 仿真概述 4
1.4 计算效率的实现 7
1.4.1 渲染引擎接口 7
1.4.2 移动物体 9
1.4.3 碰撞检测 10
1.4.4 非凸体碰撞时间的计算 12
1.4.5 稀疏或快速移动非凸体碰撞时间的计算 13
1.4.6 凸体碰撞时间的计算 15
1.4.7 稀疏或快速移动凸体碰撞时间的计算 16
1.4.8 碰撞求解 16
1.5 读者指南 17
1.6 练习 19
2 三维多面体的层次表达 20
2.1 简介 20
2.2 物体的层次表达 21
2.2.1 轴向包围盒 22
2.2.2 方向包围盒 23
2.2.3 包围球 25
2.2.4 凸包 27
2.3 连续碰撞检测的层次表达 30
2.4 被仿真世界的层次表达 31
2.4.1 均匀网格 32
2.4.2 多层网格 34
2.4.3 连续碰撞检测的包围盒 37
2.5 不同层次表达之间的碰撞检测 38
2.5.1 层次间相交检测 38
2.5.2 层次自相交检测 39
2.5.3 四方体间相交检测 40
2.5.4 球体间相交检测 43
2.5.5 三角形间相交检测 43
2.5.6 四方体-球体相交检测 46
2.5.7 四方体-三角形相交检测 47
2.5.8 球体-三角形相交检测 48
2.5.9 线段-球体相交检测 48
2.5.10 线段-三角形相交检测 49
2.5.11 线段-四方体相交检测 50
2.5.12 点在三角形内和边-边相交检测 54
2.5.13 点在物体内检测 55
2.5.14 顶点在物体内检测 55
2.5.15 连续三角形间相交检测 57
2.5.16 连续球体间相交检测 61
2.5.17 连续四方体间相交检测 62
2.6 注释和评论 63
2.7 练习 64
参考文献 65
3 粒子系统 67
3.1 简介 67
3.2 粒子动力学 68
3.3 基本交互作用力 71
3.3.1 重力 72
3.3.2 黏性阻力 72
3.3.3 阻尼弹簧 73
3.3.4 依赖于空间的作用力 74
3.3.5 用户交互作用力 77
3.4 碰撞检测 77
3.4.1 粒子间碰撞 78
3.4.2 粒子-刚体碰撞 80
3.5 粒子间的碰撞响应 83
3.5.1 计算单一碰撞的冲力 84
3.5.2 计算多个同时碰撞的冲力 89
3.5.3 计算单一接触的接触力 93
3.5.4 计算多个接触的接触力 98
3.6 粒子-刚体碰撞响应 102
3.6.1 计算冲力 103
3.6.2 计算接触力 103
3.7 专业粒子系统 104
3.7.1 粒子发射器 104
3.7.2 用户可定义的参数 106
3.8 光滑粒子流体动力学概况 109
3.9 注释和评论 114
3.10 练习 114
参考文献 115
4 刚体系统 117
4.1 简介 117
4.2 刚体动力学 117
4.3 基本相互作用力 124
4.3.1 重力 124
4.3.2 黏性阻力 124
4.3.3 阻尼弹簧 125
4.3.4 用户交互作用力 126
4.4 碰撞检测概述 126
4.5 非凸刚体之间的碰撞检测 128
4.6 稀疏或快速移动的非凸刚体间的碰撞检测 129
4.7 凸刚体之间的碰撞检测 131
4.8 稀疏或快速移动凸刚体间的碰撞检测 131
4.9 计算凸刚体间最近点的Voronoi Clip算法 132
4.9.1 特征b2是一个顶点 134
4.9.2 特征b2是一条边 135
4.9.3 特征b2是一个面 144
4.9.4 互穿处理 144
4.9.5 避免局部最小值 144
4.10 计算凸刚体间最近点的GJK算法 145
终止条件 150
4.11 刚体间的碰撞响应 151
4.11.1 计算单一碰撞的冲力 151
4.11.2 计算多个同时碰撞的冲力 160
4.11.3 计算单一接触的接触力 164
4.11.4 计算多个接触的接触力 170
4.12 重新审视粒子-刚体接触 173
4.13 注释和评论 176
4.14 练习 177
参考文献 178
5 铰接式刚体系统 180
5.1 简介 180
5.2 铰接式刚体动力学 181
5.3 单铰链系统 185
5.3.1 球形铰链 186
5.3.2 万向节 187
5.3.3 旋转铰链 188
5.3.4 圆柱铰链 190
5.3.5 棱柱铰链 191
5.3.6 刚性铰链 192
5.4 多铰链系统 192
5.5 碰撞检测 195
5.6 碰撞响应 196
5.6.1 计算单个或多个外部碰撞的冲力 197
5.6.2 计算单个或多个外部接触的接触力 198
5.7 注释和评论 199
5.8 练习 200
参考文献 201
第2部分 数学工具 205
6 附录A 实用的三维几何结构 205
6.1 简介 205
6.2 点在线上的投影 205
6.3 点在面上的投影 206
6.4 线段与面相交 206
6.5 直线与线段之间最近的点 207
6.6 从碰撞或接触法线向量计算碰撞或接触局部坐标系 208
6.7 将叉积表示为矩阵-向量乘法 209
6.8 位置和方向插值 209
6.9 建议读物 210
参考文献 210
7 附录B 运动常微分方程的数值求解 211
7.1 简介 211
7.2 欧拉法 213
7.2.1 显式欧拉法 213
7.2.2 隐式欧拉法 214
7.3 龙格-库塔法 215
7.3.1 二阶龙格-库塔法 216
7.3.2 四阶龙格-库塔法 217
7.4 使用自适应时步加速计算 220
7.5 推荐参考读物 221
参考文献 222
8 附录C 四元数 223
8.1 简介 223
8.2 四元数基本运算 223
8.2.1 加法 223
8.2.2 点积 223
8.2.3 乘法 224
8.2.4 共轭 224
8.2.5 模 225
8.2.6 逆 225
8.3 单位四元数 225
8.3.1 使用单位四元数的旋转矩阵表示法 226
8.3.2 使用单位四元数的优势 227
8.4 推荐参考读物 228
参考文献 228
9 附录D 刚体质量属性 230
9.1 简介 230
9.2 Mirtich算法 230
9.2.1 体积分转换为面积分 233
9.2.2 面积分转换为投影面积分 234
9.2.3 投影面积分转换为线积分 236
9.2.4 根据顶点坐标计算线积分 237
9.3 推荐参考读物 238
参考文献 239
10 附录E 实用的时间导数 240
10.1 简介 240
10.2 计算附着于刚体的向量的时间导数 240
10.3 计算接触法线向量的时间导数 240
10.3.1 粒子间接触 241
10.3.2 刚体间接触 241
10.4 计算切面的时间导数 242
10.5 计算旋转矩阵的时间导数 243
10.6 计算单位四元数的时间导数 244
10.7 推荐参考读物 247
参考文献 247
11 附录F 三维多面体的凸分解 248
11.1 简介 248
11.2 Joe算法 250
11.2.1 确定候选切平面 250
11.2.2 计算切平面的切割面 252
11.2.3 终止条件 253
11.3 推荐参考读物 254
参考文献 254
12 附录G 构建三维多面体的有符号距离场 255
12.1 简介 255
12.2 高效存储有符号距离场 255
12.2.1 计算栅格单元尺寸 256
12.2.2 扫描线光栅化 257
12.2.3 计算一个栅格顶点处的有符号距离 259
12.2.4 计算一个点处的有符号距离 260
12.2.5 计算一个点处的梯度 262
12.2.6 计算零等值轮廓线上的最近点 262
12.3 碰撞检测 263
12.4 碰撞求解 264
12.5 推荐参考读物 264
参考文献 265
13 附录H 凸刚体的保守时间推进算法 266
13.1 简介 266
13.2 计算保守推进时间 267
13.3 推荐参考读物 268
参考文献 268
14 附录I 线性互补问题 269
14.1 简介 269
14.2 Dantzig算法:无摩擦情形 270
终止条件 275
14.3 Baraff算法:摩擦情形 276
14.3.1 静态摩擦条件 278
14.3.2 动态摩擦 284
14.3.3 终止条件 284
14.4 推荐参考读物 285
参考文献 286