《光线跟踪算法技术》
第1章 光线跟踪器和程序设计 1
1.1 通用解决方案 1
1.2 继承 2
1.3 语言 2
1.4 建立场景 3
1.5 用户接口 3
1.6 基础光线跟踪器 4
1.7 开发光线跟踪器 4
1.8 单精度浮点数和双精度浮点数 5
1.9 效率问题 5
1.9.1 简约之美 5
1.9.2 数据存储 6
1.9.3 按引用传递 6
1.9.4 避免返回引用 6
1.9.5 避免使用浮点型除法操作 7
1.9.6 使用内联函数 7
1.9.7 工具类 7
1.10 代码风格 7
1.10.1 标识符 7
.1.10.2 实体数据类型 8
1.10.3 封装 8
1.10.4 函数签名 8
1.10.5 改变函数签名 9
1.10.6 纯虚函数和虚函数 9
1.10.7 文件结构 9
1.10.8 项目结构 10
1.11 调试 10
1.11.1 熟悉调试器 10
1.11.2 对单像素图像实施光线跟踪 10
1.11.3 跟踪像素坐标 10
1.11.4 使用cout语句 10
1.11.5 内存分配 11
1.11.6 简化操作 11
1.11.7 透明度 11
1.11.8 图像的使用 11
进一步阅读 11
第2章 数学知识 13
本章目标 13
2.1 集合 13
2.1.1 集合定义和集合符号 13
2.1.2 子集 14
2.1.3 有序偶和集合的笛卡儿积 14
2.2 区间 14
2.3 角度 15
2.3.1 度量方法 15
2.3.2 角度制和弧度制 16
2.4 三角学 16
2.4.1 定义 16
2.4.2 三角关系 16
2.5 坐标系统 17
2.5.1 3d笛卡儿坐标 17
2.5.2 圆柱坐标系统 18
2.5.3 球体坐标 18
2.6 向量 19
2.6.1 向量的定义及其表示方法 19
2.6.2 向量计算 20
2.7 顶点 21
2.8 法线 22
2.9 数学表面 23
2.9.1 隐式表面 23
2.9.2 参数表面 25
2.9.3 切平面 27
2.10 立体角 28
2.10.1 定义 28
2.10.2 球体坐标中的立体角 28
2.10.3 半球体积分 29
2.11 随机数 30
2.12 正交基和正交坐标系统 32
2.12.1 定义 32
2.12.2 构造正交基 32
2.12.3 正交坐标系统 33
2.12.4 使用正交坐标系统 34
2.13 等比数列 34
2.14 δ(?)函数 34
提示和讨论 35
进一步阅读 35
问题 36
练习 36
第3章 光线跟踪器的基本要素 37
本章目标 37
3.1 光线跟踪计算的工作原理 38
3.2 场景世界 40
3.3 光线 40
3.4 光线-对象相交测试 41
3.4.1 概述 41
3.4.2 光线和隐式表面 42
3.4.3 几何对象 43
3.4.4 平面 44
3.4.5 球体 46
3.5 颜色值 49
3.6 基本的光线跟踪器 51
3.6.1 工作类 52
3.6.2 主函数 53
3.6.3 视平面 53
3.6.4 像素和图像 55
3.6.5 build(?)函数 56
3.6.6 渲染场景 57
3.7 跟踪器 58
3.8 颜色显示 59
3.9 对多个对象实施光线跟踪 60
提示和讨论 63
进一步阅读 63
问题 64
练习 65
第4章 抗锯齿技术 66
本章目标 66
4.1 锯齿效果 67
4.2 解决方案 68
4.2.1 增加图像的分辨率 68
4.2.2 均匀采样 68
4.2.3 随机采样 70
4.2.4 抖动采样 71
4.3 细节抗锯齿技术 71
4.4 滤波 72
进一步阅读 73
问题 73
练习 73
第5章 采样技术 74
本章目标 74
5.1 采样框架 75
5.2 良好采样技术所具备的特征 81
5.3 采样模式 82
5.3.1 随机采样 82
5.3.2 抖动采样 82
5.3.3 n-rooks采样 83
5.3.4 多重抖动采样 84
5.3.5 hammersley采样 85
5.4 混合索引 87
5.5 渲染结果 89
提示和讨论 93
进一步阅读 94
问题 94
练习 95
第6章 圆采样映射 96
本章目标 96
6.1 选择性采样 96
6.2 同心映射 97
进一步阅读 100
问题 100
练习 100
第7章 半球体采样映射 101
本章目标 101
7.1 余弦分布 101
7.2 映射理论 103
7.3 实现 104
7.4 操作结果 104
进一步阅读 105
练习 106
第8章 投影视图 107
本章目标 107
8.1 定义 108
8.2 透视投影的特征 109
8.3 轴对齐透视图 113
8.4 实现方法 114
8.5 处理结果 115
8.6 透视偏差 117
进一步阅读 118
问题 118
练习 119
第9章 视见系统的应用 121
本章目标 121
9.1 描述 121
9.2 用户接口 122
9.3 视见坐标系统 123
9.4 光线计算 125
9.5 实现 126
9.6 示例 129
9.7 缩放 130
9.8 倾斜角 131
9.9 异常 131
进一步阅读 132
问题 132
练习 133
第10章 景深 134
本章目标 134
10.1 薄透镜理论 134
10.2 模拟 136
10.3 实现 139
10.4 结果 141
进一步阅读 144
问题 144
练习 145
第11章 非线性投影 146
本章目标 146
11.1 鱼眼投影 147
11.1.1 理论概述 147
11.1.2 实现 150
11.1.3 结果 152
11.2 球体全景投影 154
11.2.1 理论概述 154
11.2.2 实现 155
11.2.3 结果 156
进一步阅读 158
问题 158
练习 158
第12章 立体视觉 161
本章目标 161
12.1 视差问题 162
12.2 相机的布局 164
12.3 立体相机 166
12.4 立体图像对的显示和观察 167
12.5 实现 168
12.6 结果 171
提示和讨论 174
进一步阅读 174
问题 174
练习 175
第13章 理论基础 176
本章目标 176
13.1 辐射量 177
13.2 入射辐射度的角度依赖性 178
13.3 光线方向及其标记符号 179
13.4 辐射度和入射辐射度 180
13.5 光谱表示法 180
13.6 brdfs 181
13.6.1 定义 181
13.6.2 反射辐射度 182
13.6.3 brdfs的特征 182
13.7 反射率 182
13.8 完全漫反射brdf 183
13.9 brdf类 184
13.9.1 类的组织方式以及成员函数 184
13.9.2 lambertian类的实现 186
13.10 光照渲染模型 187
13.10.1 半球模型 187
13.10.2 面积模型 188
13.10.3 解决方案 190
13.11 monte carlo积分 191
13.11.1 基础知识概述 191
13.11.2 方差 193
13.11.3 重要性采样 193
进一步阅读 195
练习 196
第14章 光照和材质 197
本章目标 197
14.1 光照和反射 198
14.2 光照 200
14.2.1 环境光照 201
14.2.2 方向性光照 201
14.2.3 点光源 203
14.3 光照类 206
14.4 world类和shaderec类 208
14.4.1 world类 208
14.4.2 shaderec类 209
14.5 光线跟踪器类 211
14.6 漫反射着色 213
14.6.1 基本公式 213
14.6.2 双面着色 214
14.7 material类 216
14.8 示例 218
14.9 溢色处理 220
进一步阅读 222
问题 222
练习 224
第15章 镜面反射 225
本章目标 225
15.1 光照模型 225
15.2 实现 228
15.3 视角依赖性 231
15.4 有色高光 231
15.5 高光和颜色上溢 232
15.6 其他反射模型 233
进一步阅读 234
问题 234
练习 235
第16章 阴影 237
本章目标 237
16.1 阴影的重要性 237
16.2 阴影的定义 238
16.3 实现 240
16.4 ε系数 243
16.5 示例 245
16.6 计算开销 246
16.7 阴影选项 246
提示和讨论 247
进一步阅读 247
问题 247
练习 248
第17章 环境遮挡 250
本章目标 250
17.1 建模过程 251
17.2 实现 252
17.3 一个简单的场景 254
17.4 双面对象 259
17.5 其他场景 260
提示和讨论 261
进一步阅读 261
问题 262
练习 263
第18章 区域光照 264
本章目标 264
18.1 区域光源体系结构 265
18.2 直接渲染 266
18.3 直接光照计算 267
18.4 区域光照跟踪器 267
18.5 自发光材质 268
18.6 其他类型的材质 269
18.7 几何对象类 270
18.8 arealight类 271
18.9 示例图像 274
18.10 环境光照 276
提示和讨论 281
进一步阅读 282
问题 282
练习 283
第19章 光线与对象间的相交计算 286
本章目标 286
19.1 包围盒 287
19.2 轴对齐盒体 291
19.3 三角形 293
19.3.1 三角形的定义 293
19.3.2 相交测试 294
19.4 其他对象 298
19.4.1 圆形对象 298
19.4.2 矩形对象 298
19.5 通用对象 300
19.5.1 目的 300
19.5.2 通用球体、圆形以及矩形对象 301
19.5.3 通用开放式圆柱体 301
19.5.4 通用圆环体 302
19.5.5 通用对象和默认对象 307
19.6 着色问题 307
19.7 局部对象 307
19.7.1 基本理论 307
19.7.2 局部圆柱体 308
19.7.3 局部球体 308
19.7.4 局部圆环体 310
19.7.5 角度范围 311
19.8 组合对象 312
19.8.1 组合对象的优势 312
19.8.2 实现 312
19.8.3 实体圆柱体 314
进一步阅读 316
问题 316
练习 316
第20章 仿射变换 321
本章目标 321
20.1 2d变换 322
20.1.1 缩放操作 322
20.1.2 旋转操作 323
20.1.3 剪切操作 324
20.1.4 镜像变换 325
20.1.5 平移变换 325
20.2 3d齐次坐标 325
20.3 3d变换 326
20.3.1 平移变换 326
20.3.2 缩放变换 327
20.3.3 旋转变换 328
20.3.4 镜像变换 328
20.3.5 剪切变换 329
20.4 组合变换 329
20.5 逆变换 332
20.5.1 独特的逆变换 332
20.5.2 组合逆变换 333
20.6 任意直线的旋转变换 333
进一步阅读 335
问题 336
练习 336
第21章 对象变换 337
本章目标 337
21.1 变换对象的相交计算 337
21.1.1 理论概述 337
21.1.2 顶点和向量的变换操作 339
21.1.3 程序设计 339
21.1.4 光线与转换对象间的相交计算 340
21.1.5 变换矩阵的逆矩阵 340
21.1.6 示例 341
21.2 法线变换 341
21.2.1 理论概述 341
21.2.2 程序设计 342
21.3 对象的直接变换 342
21.4 对象的实例化 343
21.5 圆角对象 348
提示和讨论 351
进一步阅读 351
问题 352
练习 353
第22章 规则栅格 356
本章目标 356
22.1 理论概述 357
22.2 构建栅格 358
22.3 遍历 365
22.4 测试 369
22.4.1 测试建议 369
22.4.2 8盒体测试 369
22.4.3 随机球体 370
22.4.4 其他问题 373
22.5 栅格对象和变换对象 373
22.6 与bvhs进行比较 376
进一步阅读 376
问题 377
练习 378
第23章 三角形网格 380
本章目标 380
23.1 球体的嵌格操作 381
23.1.1 固定着色 381
23.1.2 平滑着色 382
23.2 网格数据结构 383
23.3 ply文件 386
23.4 示例 388
23.4.1 两个三角形 388
23.4.2 计算法线 389
23.4.3 多重网格对象 391
23.5 层次实例化栅格对象 392
进一步阅读 394
问题 394
练习 394
第24章 镜面反射 396
本章目标 396
24.1 光照模型 397
24.2 算法实现 399
24.2.1 实现目标 399
24.2.2 whitted跟踪器类 400
24.2.3 完全镜面brdf 401
24.2.4 反射材质 401
24.3 反射对象 402
24.4 不一致性 404
24.5 有色反射 404
24.6 实像和虚像 405
24.7 示例 407
24.7.1 球体反射 407
24.7.2 镜面墙 408
24.7.3 自反射 409
24.7.4 4球体渲染 409
24.7.5 球体内部反射 411
24.7.6 生成悬浮的幻影 412
24.7.7 圆角对象 414
24.7.8 三角形网格 415
进一步阅读 417
问题 417
练习 422
第25章 光泽反射 425
本章目标 425
25.1 光泽反射模型 426
25.2 实现 429
25.3 计算结果 432
进一步阅读 434
问题 434
练习 435
第26章 全局光照 437
本章目标 437
26.1 光线传输 437
26.2 路径跟踪 438
26.2.1 描述 438
26.2.2 实现 440
26.3 结果 442
26.3.1 环境光源 442
26.3.2 cornell盒体 444
26.3.3 反射表面以及腐蚀效果 445
26.4 光源采样 446
提示和讨论 449
进一步阅读 450
问题 450
练习 451
第27章 透明度 452
本章目标 452
27.1 折射率 454
27.2 对象表面的物理特征及其折射率 454
27.3 全内反射 456
27.4 光照模型 457
27.5 具体应用 459
27.6 实现 460
27.7 透明球体 463
27.7.1 概述 463
27.7.2 η≥1情形 464
27.7.3 η [ 1情形 466
27.7.4 球体内部光线 466
27.8 透明组合对象 468
27.9 忽略η值 470
进一步阅读 470
问题 471
练习 474
第28章 真实透明度计算 478
本章目标 478
28.1 fresnel方程 479
28.1.1 垂直入射 479
28.1.2 切线入射 480
28.1.3 全内反射 480
28.2 颜色过滤 481
28.3 实现 482
28.4 图像 486
28.4.1 fresnel效果 486
28.4.2 颜色过滤 488
28.4.3 三角形网格 490
28.4.4 嵌套球体 492
28.4.5 区域光 493
28.5 透明盒体 493
28.5.1 理论概述 494
28.5.2 玻璃中的光线透射 497
28.6 透明球体 499
28.6.1 反射来源 499
28.6.2 透明球体中的球体 500
28.6.3 透明球体内部的相机 501
28.7 水杯 505
28.8 鱼缸 507
28.9 腐蚀效果 508
进一步阅读 509
问题 510
练习 514
第29章 纹理映射 518
本章目标 518
29.1 简介 518
29.2 纹理实现 520
29.3 映射技术 523
29.3.1 一般实现过程 523
29.3.2 矩形映射 524
29.3.3 柱状映射 524
29.3.4 球体映射 525
29.3.5 mercator投影 527
29.3.6 光探针映射 528
29.4 实现 530
29.5 抗锯齿 533
29.6 三角形网格 534
进一步阅读 538
问题 539
练习 539
第30章 过程纹理 542
本章目标 542
30.1 简介 542
30.2 棋盘纹理 543
30.2.1 3d棋盘纹理 543
30.2.2 2d棋盘纹理 545
30.3 纹理和纹理变换 547
30.3.1 内部纹理变换 548
30.3.2 对象变换和纹理 551
30.3.3 消除对象变换 552
进一步阅读 554
问题 554
练习 554
第31章 噪声纹理 557
本章目标 557
31.1 噪声函数 557
31.1.1 期望特征 557
31.1.2 栅格噪声函数 558
31.2 插值计算 561
31.2.1 线性插值 561
31.2.2 三线性插值 565
31.2.3 过冲现象 569
31.3 噪声函数和 570
31.3.1 分形求和计算 571
31.3.2 扰动函数 574
31.3.3 分形布朗运动 575
31.4 基本噪声纹理 578
31.5 环绕噪声纹理 580
31.6 大理石纹理 581
31.7 沙岩纹理 585
进一步阅读 587
问题 587
练习 587