第1章 三维计算机图形学的数学基础 1
1.1处理三维结构 1
1.1.1计算机图形学中的三维几何学——仿射变换 1
第一部分 基础知识 1
1.1.2改变坐标系的变换 6
1.2向量与计算机图形学 7
1.2.1向量加法 7
1.2.2向量的长度 8
1.2.3法向量与叉积 8
1.2.4法向量与点积 9
1.2.5与法向量相关的向量 10
1.3.1光线几何学——交点 11
1.3光线与计算机图形学 11
1.3.2光线与球体的交点 12
1.3.3光线与凸多边形的交点 12
1.3.4光线与长方体的交点 15
1.4多边形性质的双线性插值 15
1.5使用SIMD指令集的基础数学引擎 16
第2章 建模与表示1——对比回顾与多边形网格模型 24
2.1简介 24
2.2三维物体的多边形表示 27
2.2.1创建多边形对象 30
2.2.2多边形对象的手工建模 31
2.2.4多边形对象的交互式/数学生成 32
2.2.3多边形对象的自动生成 32
2.3高级方法——构造性实体几何法 36
2.4应用建模器或编辑器的高级方法 38
第3章 建模与表示2——多边形网格的经济性 40
3.1多边形模型压缩 40
3.2几何形状压缩(每个顶点的信息) 40
3.3编码连接 42
3.4三角链 42
3.5局部与全局算法 44
3.6顶点缓冲的应用 44
3.7细节层次处理 46
4.2简单的高度场地形 51
4.1简介 51
第4章 建模与表示3——地形特殊化 51
4.3地形的建模过程——分形 52
4.4地形LOD:三角二叉树 53
4.5用光线投射的方法渲染地形 56
第5章 建模与表示4——贝济埃、B样条和细分曲面 57
5.1简介 57
5.2贝济埃曲线 58
5.2.1分段贝济埃曲线的连接 63
5.2.2贝济埃曲线性质小结 64
5.3 B样条曲线 64
5.3.1均匀B样条 65
5.3.2非均匀B样条 68
5.3.3 B样条曲线特性小结 73
5.4有理曲线 74
5.4.1有理贝济埃曲线 74
5.4.2 NURBS 75
5.5从曲线到曲面 76
5.5.1连续性与贝济埃面片 79
5.5.2贝济埃面片物体——犹他茶壶 80
5.5.3 B样条曲面片 81
5.6建模或创建面片曲面 82
5.6.1用面片的横截面建模 83
5.6.2编辑面片网络——改变存在的网络 86
5.6.3用曲面拟合创建面片物体 89
5.7渲染参数曲面 93
5.8游戏中的实用贝济埃技术 99
5.8.1双二次网格亚采样 99
5.8.2曲线、物体和细分 106
5.9细分曲面 111
5.9.1 Catmull-Clark细分 111
5.9.2蝴蝶细分 114
5.9.3改进的蝴蝶算法 123
5.10.2面片网格 125
5.10.3细分表面 125
5.10.1 LOD多边形网格 125
5.10缩放性——多边形网格、面片网格和细分曲面 125
第二部分 传统3D图形处理方法 127
第6章 传统多边形网格渲染技术 127
6.1 图形流水线中的坐标空间和几何操作 128
6.1.1局部或模型坐标系 128
6.1.2世界坐标系 128
6.1.3照相机(或眼睛、视见)坐标系 128
6.2视见空间里的操作 131
6.2.1筛选或背面剔除 132
6.2.2视见约束体 132
6.2.3三维屏幕空间 134
6.2.4视见约束体和深度 136
6.3图形流水线中的算法操作 138
6.3.1基本视见约束体筛选和裁剪 139
6.3.2像素的明暗处理 141
6.3.3明暗插值技术 146
6.3.4隐面剔除 148
6.4渲染示例 154
6.4.1图6-36(见彩页) 154
6.4.2图6-37(见彩页) 154
6.4.3图6-38(见彩页) 154
6.4.4图6-40(见彩页) 154
6.4.5图6-41(见彩页) 155
第7章 传统映射技术 156
7.1简介 156
7.2.1使用双线性插值的逆向映射 158
7.2二维纹理贴图到多边形网格物体 158
7.2.2使用中间表面的逆向映射方法 159
7.2.3实用纹理映射 161
7.3二维纹理空间到双三次参数曲面片物体 163
7.4凹凸纹理映射 164
7.4.1凹凸纹理映射的多通道技术 165
7.4.2针对凹凸映射的预计算技术 166
7.5环境映射技术 166
7.5.1立方体映射 168
7.5.2球面映射 168
7.5.3环境映射:要点比较 170
7.6.1三维噪声函数 171
7.6三维纹理域技术 171
7.6.2模拟湍流 172
7.6.3三维纹理和动画 173
7.6.4三维光照贴图 174
7.7对比试验 174
7.7.1图7-23(见彩页) 175
7.7.2图7-24(见彩页) 175
7.7.3图7-25(见彩页) 175
第8章 反走样理论和实践 176
8.1简介 176
8.2走样和采样 176
8.3锯齿边 178
8.4计算机图形采样和实际采样的比较 179
8.5采样和重构 180
8.6简单的比较 180
8.7前滤波方法 181
8.8超采样或后滤波 182
8.9纹理映射中的反走样 184
8.10图像的傅里叶变换 188
第三部分 实时渲染 193
第9章 复杂场景的可视性处理 193
9.1简介 193
9.2为什么要用树结构 195
9.2.2八叉树 196
9.2.1空间细分层次 196
9.3 BSP树 198
9.4包围体层次结构 200
9.5 BSP树和多边形物体 200
9.5.1 BSP树和隐面消除 200
9.5.2怎样为多边形网格场景创建BSP树 204
9.5.3背面筛选 207
9.5.4对照视见约束体进行筛选 207
9.5.5影响范围 209
9.5.6实用BSP树 209
9.5.7地形和BSP技术 210
9.6用于构造内型环境的特殊手段 212
9.7人口和镜子 213
9.8高级视见约束体筛选 216
9.8.1开发BV几何性质 217
9.8.2在视见约束体筛选中开发一致性 218
9.9精确的可视性 219
9.9.1精确的可视性和预计算 219
9.9.2可视性过程的排序策略 220
9.9.3视见约束体内的可视性:闭塞筛选 220
9.10动态物体及其可视性 223
第10章 游戏中的光照效果 225
10.1光照贴图 225
10.1.1光照贴图空间选取 226
10.1.2多边形/光照贴图的一致性 227
10.1.3光照贴图实践 228
10.2.2移动的(以观察者为中心的)聚光灯 230
10.2.3运动物体和环境光 230
10.2使用光照贴图的动态光照效果 230
10.2.1运动物体(常用) 230
10.2.4运动物体和Gouraud明暗模型 231
10.3动态光源 231
10.4可调/可分离的光源 231
10.5雾贴图/容积雾 231
10.6光照例子的研究 232
第11章 游戏中的阴影 237
11.1阴影的特性 237
11.1.1计算机图形学中阴影的特性 238
11.2.1阴影算法:多边形投影/扫描线 239
11.1.2地面上的简单阴影 239
11.2经典的阴影算法 239
11.2.2阴影算法:阴影体 240
11.2.3阴影算法:光源变换到阴影多边形的来历 242
11.2.4阴影算法:阴影Z缓冲 243
11.3游戏中的阴影 244
11.3.1在光照贴图中加入阴影 244
11.3.2柔和阴影 244
11.3.3动态物体的快速阴影 245
12.2多路函数性 249
12.2.1合成渲染图像 249
12.1简介 249
第12章 多路渲染 249
12.2.2混合(OpenGL) 250
12.2.3 Z缓冲(OpenGL) 251
12.2.4累加缓冲(OpenGL) 251
12.2.5模板缓冲(OpenGL) 251
12.3多路算法 252
12.3.1由后向前透明 252
12.3.2平面反射 253
12.3.3多路阴影体 255
12.3.4多路阴影体——实现 256
12.3.5光照对象 259
12.4多路采样方法 260
12.5多纹理 261
12.6多纹理实例 262
12.6.1细节调节 262
12.6.2视角依赖的细节光照贴图 263
12.6.3将多纹理用作最终光照模型 263
第四部分 对象的控制 265
第13章 运动控制 265
13.1简介 265
13.2对动画进行预编辑——线性插值及耗用时间 266
13.3预编辑动画——插值问题 267
13.4预编辑动画——显式编辑 268
13.5旋转插值 271
13.6用四元数表示旋转 272
13.6.1四元数的插值 274
13.6.2移入与移出四元数空间 274
13.6.3球形的线性插值(slerp) 275
13.7将照相机作为动画对象 277
13.8粒子动画 278
13.9粒子动画与计算机游戏 280
13.10关节结构 282
第14章 动态仿真控制 290
14.1著名示例——脱机动画中的动力学 290
14.2初值问题和边值问题 290
14.4动态仿真的动机 291
14.3主题范围 291
14.5基本经典粒子论 292
14.6基本经典刚体论 294
14.6.1线动量、角动量和质心 294
14.6.2世界参照系和物体参照系 294
14.6.3刚体的方向 294
14.6.4角速度 295
14.6.5刚体——力和力矩 296
14.6.6惯性张量 297
14.6.7碰撞反应 299
14.7动态仿真的实用性 300
14.7.1一般动力学模块 300
14.7.2确定确切的碰撞时间 301
14.7.3应用依赖性 302
14.7.4简单例子 302
14.7.5预计算和在线仿真 306
14.7.6时空约束 307
14.8数值积分 308
14.8.1欧拉方法和误差 308
14.8.2多步法——Adams-Bashforth 309
14.8.3预测—校正 310
14.8.4Runge-Kutta 311
14.8.5自适应方法 312
第15章 碰撞检测 313
15.1广义/狭义二阶段算法 315
15.2包围体层次结构 317
15.3使用AABB的广义碰撞检测 318
15.3.1 OBB树 319
15.3.2建造OBB树 319
15.4使用OBB的广义碰撞检测 320
15.5使用局部或对象空间划分的广义碰撞检测 322
15.6狭义碰撞检测 323
15.6.1凸多面体对——精确碰撞检测 323
15.6.2 Lin-Canny最近特征算法 324
15.6.3分割面 326
15.7单阶段方法 327
15.7.1 BSP树 327
15.7.2局部或对象空间划分——BSP树合并 328
15.7.3球体/多面体的特殊化处理 329
15.7.4使用深度缓存 330
15.7.5 Hubbard的时间攸关球树算法——单步方法 330
第16章 交互控制 333
16.1交互与动画 333
16.2控制器模块 333
16.3用户—对象交互——使用简单阻尼的6自由度控制 334
16.4用户—对象动画——4键汽车仿真 336
16.5对象—对象交互 339
16.6照相机—对象交互 340
16.7具有简单自治行为的对象 340
16.7.1炮台 340
16.7.2机器人飞行物体 341
16.8用户—场景交互 343
第17章 行为与人工智能 345
17.1确定的方法和体系结构 346
17.1.1有限状态机 347
17.1.2模糊状态机 348
17.2主体和层次 349
17.2.1反射或反应主体 350
17.2.2具有内部状态的反射主体 350
17.2.3基于目标的主体 350
17.3主体体系结构的例子 351
17.4认知模型和情景演算 354
17.5作为例子的感知视觉的作用 358
17.6认知结构 359
17.6.1认知和神经网络 359
17.6.2两个线性可分模式类的感知器 361
17.6.3n类别的感知器 363
17.6.4 MLP前馈神经网络 364
17.6.5向后传播算法 365
第五部分 二维技术 367
第18章 二维技术 367
18.1图像金字塔 367
18.2小波变换 369
18.3图像变换与基矩阵 372
18.4 小波与计算机游戏 373
18.5图像变形——变形转换技术 377
18.5.1变形转换二维图像 379
18.5.2二样条网格扭曲 380
第19章 基于图像的渲染 383
19.1简介 383
19.2重复使用已绘制的图像——二维技术 383
19.2.1平面插板或sprite 383
19.2.2计算平面插板的有效性 385
19.2.3布告板和光照效果 386
19.3.1优先渲染 387
19.3.2图像分层 387
19.3变化的渲染资源 387
19.4使用深度信息 390
19.4.1三维卷绕 390
19.4.2分层深度图像(LDI) 393
19.4.3使用LDI的人口图像 394
19.5视见插值 395
19.6四维技术——泛光或光场渲染方法 398
19.7照片建模和IBR 399
19.7.1使用照片全景的基于图像的渲染 402
19.7.2合成全景图 402
20.1简介 405
20.2定义 405
第20章 多人游戏技术 405
第六部分 软件技术 405
20.3多人游戏的实现 406
20.4多人游戏所面临的问题 408
20.4.1延迟发生的原因 408
20.4.2延迟语义学、消息丢失和重组 409
20.5简化通信信息 410
20.5.1数据压缩 410
20.5.2预测性方法 411
20.5.3一致性 413
20.6应用客户—服务器模式实现多人游戏 414
21.1.1类 421
21.1 C++游戏编程 421
第21章 引擎体系结构 421
21.1.2构造函数 422
21.1.3析构函数 422
21.1.4继承性 422
21.1.5虚拟函数 423
21.1.6运算符 424
21.1.7模板 425
21.1.8公有性/私有性/保护性 426
21.2游戏中复杂度的管理和改进 426
21.3引擎设计和体系结构 427
21.4Fly3D软件体系结构 428
21.4.1插件 429
21.4.2 Fly3D前端和每帧中的主要渲染操作 432
21.4.3碰撞检测 434
21.4.5作用球 435
21.4.6对象与插件间的通信 435
21.4.4库存和活动对象列表 435
21.4.7照相机和场景绘制 436
21.4.8文本输出 436
21.4.9渲染API 436
第22章 Fly3D软件开发工具包参考 438
22.1简介 438
22.2全局参考 438
22.3对象参考 441
22.3.1类anim_mesh:public mesh 441
22.3.3类bezier_curve:public base_obiect 444
22.3.2类base_object 444
22.3.4类bezie_rpatch:public base_object 447
22.3.5类boundbox 452
22.3.6类bsp_node:public plane 454
22.3.7类bsp_object:public baseobject, particle,local_system 454
22.3.8类class_desc 460
22.3.9类console 461
22.3.10类directX 464
22.3.11类face:public plane 470
22.3.12类fly_pak 472
22.3.13类fly_pak_util 475
22.3.15类flydllgroup 476
22.3.14类flydll 476
22.3.16类flyEngine 480
22.3.17类light_map 498
22.3.18类light_map_pic 500
22.3.19类light_vertex 502
22.3.20类local_system 503
22.3.21类mat4 x4 505
22.3.22类mesh:public base_object 506
22.3.23类mp_games 510
22.3.24类mp_msg 511
22.3.25类param_desc 511
22.3.26类particle 512
22.3.27类pieture 514
22.3.28类plane 517
22.3.29类player_data 517
22.3.30类render 518
22.3.31类renderGL:public render 520
22.3.32类sound:public base_object 523
22.3.33类static_mesh:publicbsp_object 524
22.3.34类stripfan_mesh 526
22.3.35类textcache 528
22.3.36类textcacheGL:public text-cache 531
22.3.37类vector 534
附录A Fly3D SDK教程 539
参考文献 559