前言 1
绪论 3
0.1 本书的组织 3
0.2 第一部分 4
0.2.1 数学模块 4
0.2.2 图形面模块 4
0.2.3 使用这些模块 4
0.3.3 光线——物体相交测试 5
0.3.5 复习光线追踪程序代码 5
0.3.4 阴影、纹理和光照 5
0.3.2 光线追踪程序 5
0.3.1 光线追踪理论 5
0.3 第二部分 5
0.3.6 怎样使用光线追踪程序 6
0.4 第三部分 6
0.5 第四部分 6
0.6 第五部分 6
0.7 第六部分 6
0.8 第七部分 6
0.10 总结 7
0.9 软件和硬件要求 7
第一部分 标准和通用模块 11
第一章 标准和C语言 11
1.1 为什么选用C语言 11
1.2 编程语言的概念 11
1.3 变量和数据类型 12
1.4 运算符 13
1.5 程序控制 15
1.6 函数 16
1.8 指针和数组 17
1.7 宏 17
1.9 内存 18
1.10 结构 18
1.11 typedef 19
1.12 输入输出(I/O) 19
1.13 文件I/O 20
1.14 编程风格 21
1.15 参考读物 21
1.16 光线跟踪 21
2.1.1 BkDefs.文件 23
第二章 数学模块 23
2.1 头文件 23
2.1.2 BkMath. 头文件 24
2.2 编译这些模块 26
2.3 Bkath.C 程序 26
2.4 基本数学函数 38
2.4.1 Radians和Degrees函数 38
2.4.2CosD和SinD 函数 39
2.4.3 Power函数 39
2.4.6 Exp10函数 40
2.4.5 Log函数 40
2.4.7 Sign和Intsign函数 41
2.4.8 IntSqrt 函数 41
2.4.9 IntPower函数 41
2.4.10 MIIN和MAX函数 42
2.5 向量和矩阵函数 42
2.5.1 Vec和VecInt函数 43
2.5.2 UnVec 和UnVecInt函数 43
2.5.3 VeDot函数 43
2.5.4 V ecCross函数 44
2.5.5 VecLen函数 45
2.5.6 VecNormalize函数 46
2.5.7 V ecMatxMult函数 46
2.5.8 VecSub和VecSubInt函数 46
2.5.9 VeeAdd 函数 47
2.5.10 VecAdd3 函数 47
2.5.11 VecCopy和VecCopyInt函数 47
2.5.13 VecScalMult\VecscalMultl和VecScalMultInt函数 48
2.5.14 VecAddScalMultl和VecScalMultInt函数 48
2.5.12VecLinComb函数 48
2.5.15 VecNull 和VecNulllnt函数 49
2.5.16 VecElemMult函数 49
2.5.17 VecMin和VecMax函数 49
2.5.18 VccNegate函数 49
2.6 仿射变换例程 49
2.6.1 ZeroMdtrlx函数 49
2.6.2 Translate3D函数 50
2.6.3 Scale3D函数 50
2.6.5 Muluply3D函数 51
2.6.4 Rotate3D函数 51
2.6.6 MatCopy函数 52
2.6.7 PrepareMatnx 函数 52
2.6.8 PrepareInvMatrix 52
2.6.9Tansform 函数 52
2.7 伪随机数的生成 53
2.7.1 InitRand 函数 53
2.7.2 Rand函数 53
2.7.3 RandInt函数 53
3.1 BkGlobs.H头文件 55
第三章 图形界面模块 55
3.2 BkGraph.H头文件 56
3.3 BkGraph.C程序 57
3.3.1 Plot函数 68
3.3.2 Clear_Palette函数 68
3.3.3 Set_Palette函数 68
3.3.4 Imt_Palette 68
3.3.5 Imt_Palette 函数 68
3.3.10 MinI和MaxI函数 69
3.3.9 Line函数 69
3.3.7 Swap函数 69
3.3.6 CyCle_Palette函数 69
3.3.8 Circle函数 69
3.3.11 Tmvial Reject函数 70
3.3.12 Chp_To_Screen函数 70
3.3.13 Imt_Graphics函数 70
3.3.14 Set_Graphics_Mode函数 70
3.3.15 Wait_For_Key函数 70
3.3.16 Exit_Graphics函数 70
3.4.2 Init_Perspective函数 71
3.4.3 Map_Coordmates函数 71
3.3.17 Fitle 函数 71
3.4.1 Init_Plotting函数 71
3.4 二维画图函数 71
3.4.5 Cartesian_Plot_3D函数 72
3.4.6 Cylmdrical_Plot_3D函数 72
3.4.7 Spherical Plot_3D函数 73
3.4.8 Draw_Line_3D函数 73
3.5.1 Put)_Pixel函数 74
3.5 像素函数 74
3.5.2 Get_Pixel函数 75
3.6 设置坐标轴和调色板的函数 75
3.6.1 Put_Axis_And _Palette函数 75
3.6.2 Display_Axis函数 75
3.6.3 Display_Palette函数 76
3.6.4 Axis_And_Palette 函数 76
3.7 使用模块 76
4.2 Plants.C 文件 77
4.1 Crystal.C文件 77
第四章 使用模块 77
4.3 S移花接木——3D,C程序 83
4.4 三维圆周运动模拟示例程序 86
4.5 真实物体 94
第二部分 光线追踪 97
第五章 光线追踪程序数学模块 97
第六章 光线追踪理论 121
6.1 即时光线追踪 123
6.2 光线的反射 126
6.3 折射 128
6.4 问题,问题,问题! 131
6.5 答案,答案,答案! 132
6.6 细节 133
第七章 光线追踪程序 135
7.1 投影 135
7.2 图像质量和变形 137
7.3 防变形方法 137
7.4 均匀采样 138
7.7 简单的照像机模型 139
7.6 结果 139
7.5 统计密集采样 139
7.8 trace函数 140
7.9 背景 141
第八章 光线—物体相交测试 165
8.1 物体的定义 165
8.1.1 光线的参数表示 165
8.1.2 与球面相交 166
8.1.3 与二次曲面相交 167
8.2 曲面法线计算 167
8.3 与平面物体相交 168
8.4 三角形小块 174
8.5 构造复杂物体 181
8.6 构造实体几何 185
8.6.1 包围体 186
8.6.2 包围面 187
8.7 层次树 188
8.8 搜索物体 192
8.9 其它算法 199
9.1 阴影模型 201
第九章 看见光亮 201
9.1.1 背景色(K) 202
9.1.2 漫反射颜色(K) 202
9.1.3 镜面反射迭加(K) 203
9.1.4 反射率(K)及折射率(K) 203
9.2 纹理,纹理,纹理 204
9.3 映射图象 204
9.4 实体纹理构造 205
9.5 噪声及扰动 206
9.6 实体纹理样式 215
9.7 球面纹理 220
9.8 制造波纹 221
9.9 凹凸纹理 222
9.10 大气 223
9.11 阴影 224
9.12 关于代码 226
第十章 光线追踪程序代码 227
10.1 分离和解释程序 228
10.1.1 预处理 229
10.1.2 记号分析程序 229
10.2 基本体文件 230
10.3 扫描 231
10.4 追踪 231
10.5 相交 232
10.6 包围平面 232
10.7 阴影处理 233
10.8 通向BOB的途径 234
10.9 内存问题 234
10.10 构成画面 234
11.1 运行Bob 235
第十一章 如何使用光线追踪程序 235
11.3 统计数字 237
11.2 Bob 237
11.4 输入文件(B)格式 239
11.5 输入文件布局 240
11.6 预处理程序 240
11.6.1 宏 241
11.7 EDL分析程序 242
11.7.1 studio结构 242
11.6.2 包含指令 242
11.7.2 studio参数 243
11.8 光源 246
11.9 表面 248
11.9.1 凹凸纹理 250
11.9.2 加纹理的表面 252
11.10 基本体 253
11.10.1 球 253
11.10.2 环 254
11.10.5 圆锥 255
11.10.4 三角形小块 255
11.10.3 多边形 255
11.11 变换 256
11.12 图像纹理 257
11.13剪切 257
11.14有关说明 259
第三部分 生成光线追踪程序所城需的物体数据库 263
第十二章 过程物体数据库 263
12.1 生长的树 264
12.2 环形与环面 267
12.3 一个令人困惑的物体 270
12.5一块吸收性极好的海绵 273
12.6 一个六角形 275
12.7 更为复杂的数据库 277
第十三章 Z缓冲区数据 279
13.1 Z缓冲区数据的线框轮廓 279
13.2 光线追踪的Z缓冲区数据库 280
13.3 生成Z缓冲区数据库的程序 285
13.4 生成Z缓冲区数据库的分形程序 291
13.6 三维Julia集 294
13.5 三维Mandelbrot集 294
13.7 使用四元数的分形 298
13.8 四元数数学 299
13.9 生成四元数分形数据库 309
13.10 地形Z缓冲区 309
13.11 Smooth.EXE 313
13.12 移动山脉 314
14.1.1 基本体支持和操作 317
14.1.2 物体支持和操作 317
第十四单章 三维数据库建横器 317
14.1 数据库建模程序的功能 317
第四部分 物体数据库的CAD产品 317
14.1.3 适当时间内生成数据库视图 318
14.1.4 在数据库内部自由移动 318
14.1.5 陷藏数据库细节 318
14.2 层次结构的重要性 318
14.3 Bob的数据库层次:基本体、物体、画面 319
14.2.4 高效性 319
14.2.3 区域性和可扩展性 319
14.2.1 重复利用性 319
14.2.2 灵活性 319
14.4Eb:Bob 的简单数据库建模程序 320
14.4.1 启动Ed 320
14.4.2 Ed 屏幕 320
14.4.3 告诉Ed 做什么 320
14.5.1 读写画面文件 321
14.5.2 移动观察点 321
14.5 系统模式 321
14.4.4系统参数 321
14.5.3 选择物体 322
14.5.4 实例化及删除物体 322
14.5.5 编辑物体位置和比例 322
14.5.6 修改studto定义 322
14.5.7 编辑studio参数 322
14.5.8 退出studio模式 322
14.5.9 编辑物体 322
14.5.10 编辑物体结构 322
14.5.14 退出Ed 323
14.5.13 退出物体模式 323
14.5.11 多边形的一个特例 323
14.5.12 编辑物体特征 323
14.6 Ed源代码总览 324
14.6.1 Ed源代码使用的规则 324
14.6.2 Ed 基本数据结构 324
14.6.3 Ed全局变量 325
14.6.4 Ed主要的程序元素 325
14.6 Ed输出文件的局限 326
15.1.1 直接指定调色板 329
15.1.2 多数法 329
第十五章 图像处理 329
15.1 IMG2GIF.C 329
第五部分 计算机图形学的图像处理技术 329
15.1.3 中分法 330
15.1.4 固定调色板 330
15.2 有趣有益的抖动法 331
15.3 建立,GIF文件 332
15.4 IMG2GIF.C技术说明 333
15.7 图像显示 334
15.6 改善图像质量 334
15.5.2 Palette.MAP文件格式 334
15.5 文件格式 334
15.5.1 Bob的.IMG文件格式 334
第六部分 图形硬件 347
第十六章 图形硬件驱动程序 347
16.1 24位颜色 348
16.2 Bob 结束语 360
第七部分 本书之外内容 363
第十七章 超越Bob 363
17.1 制作图形 363
17.2.2 运动模糊 364
17.2.3纹理问题 364
17.2 动画 364
17.2.1 车轮 364
17.3 实时光线追踪 365
17.4 高级光照模型 365
17.5 辐射 365
17.5.1 更多的近似 366
17.5.2 为何使用辐射模型 366
17.6 真实三维图像 366
17.7 何去何从 366