为什么要阅读本书 1
0.1 数学模块 2
0.2 图形界面模块 3
0.3 使用数学和图形模块 3
0.4 实体建模理论和数据库结构 3
0.5 在画面中增加物体 4
0.6 在屏幕上排序并显示物体 4
0.7 描述文件编制程序 4
0.8 实体建模程序 4
0.12 硬件和软件要求 5
0.11 光线照射和光线追踪 5
0.10 Z缓冲区 5
0.9 为实体类型生成数据 5
0.13 总结 6
第一部分 通用程序 13
第一章 数学模块 13
1.1 数字函数 13
1.2 简单的数学函数 13
1.3 Radians和Degrees函数 14
1.4 CosD和SinD函数 14
1.5 Power函数 26
1.6 Log函数 26
1.11 向量和数组程序 27
1.10 IntPower函数 27
1.7 Exp10函数 27
1.8 Sign和IntSign函数 27
1.9 IntSqrt函数 27
1.12 Vec和VecInt函数 28
1.13 UnVec和UnVeclnt函数 28
1.14 VecDot函数 28
1.15 VecCross函数 28
1.16 VecLen函数 28
1.17 VecNormalize函数 28
1.21 VecCopy函数 29
1.23 VecScalMult和VecScalMultInt函数 29
1.22 VecLinComb函数 29
1.20 VecAdd和VecAdd3函数 29
1.19 VecSub和VecSubInt函数 29
1.18 VecMatxMult函数 29
1.24 VecAddScalMult函数 30
1.25 VecNull和VecNullInt函数 30
1.26 VecElemMult函数 30
1.27 仿射变换程序 30
1.28 ZeroMatrix函数 30
1.29 Translate3D函数 30
1.32 MultiPly3DMatrices函数 31
1.31 Rotate3D函数 31
1.30 Scale3D函数 31
1.33 PrepareMatrix函数 32
1.34 PrepareInvMatrix函数 32
1.35 Transform函数 32
第二章 图形界面模块 33
2.1 SemMode函数 33
2.2 PreCale函数 33
2.3 Plot函数 33
2.4 ClearPaltte函数 33
2.5 SetPalette函数 34
2.6 InitPalette1函数 47
2.7 InitPalette2函数 48
2.8 循环调色板函数 48
2.9 Swap函数 48
2.10 Circle函数 49
2.11 Draw 函数 49
2.12 InitGraphics函数 50
2.13 WaitForkey函数 50
2.14 ExitGraphics函数 50
2.15 Title函数 50
2.16 三维画图程序 50
2.17 InitPlotting函数 50
2.19 MapCoordinates函数 51
2.18 InitPerspective函数 51
2.20 CartesianPlot3D函数 52
2.21 CylindricalPlot3D函数 52
2.22 SphericalPlot3D函数 53
2.23 DrawLine3D函数 53
2.24 PutPixel函数 53
2.25 GetPixel函数 53
2.26 显示坐标轴和彩色调色板 53
第三章 如何使用模块 55
3.1 在Mandelbrot集上散步 55
3.2 模拟两个沿轨道飞行的粒子 63
3.3 Orbit-2P.c程序 65
3.4 Orbit-3P.c程序 68
3.5 三个粒子轨道 73
3.6 生成塞平斯基三角形 73
3.7 分叉图 76
3.8 生成一个奇异的有吸引力的人 78
3.9 生成Lorenz Attractor 81
第二部分 线框和实体建模 87
第四章 实体建模理论和数据库结构 87
4.1 比例因子 87
4.2 顶点和小平面数组 87
4.3 装入和存储顶点和小平面数据 94
4.6 一个手工生成数据文件的例子 95
4.4 画一个线框小平面 95
4.5 在屏幕上画一个实体小平面 95
第五章 给画面增加物体 97
5.1 初始化物体缓冲区 97
5.2 在物体缓冲区插入物体信息 97
5.3 给画面增加边缘反射 107
5.4 从一个磁盘文件给画面增加物体 108
第六章 在屏幕上排序和显示物体 109
6.1 以放置到屏幕上的物体进行排序 109
6.2 在屏幕上放置物体 122
6.3 显示物体和反射 123
第七章 Model.c描述文件生成程序 125
第八章 3-D建模程序 129
8.1 观察者和光源向量 129
8.2 装入描述文件和画面数据 130
8.3 仿射变换 146
8.4 求出表面的法向向量 146
8.5 光照模型 147
8.6 检查小平面是否可见 147
8.7 反射屏幕缓冲区 147
8.9 在屏幕上画一个实体小平面 148
8.10 Model.c程序 148
8.8 获得小平面屏幕坐标 148
第九章 生成物体的数据库 151
9.1 增加顶点 151
9.2 生成顶点前的初始化 154
9.3 使用程序MakeObj.c生成物体 155
9.4 生成一个圆锥体或金字塔数据文件 158
9.5 为一个圆柱体生成数据文件 161
9.6 为一个半球生成数据文件 165
9.7 生成一个圆球的数据文件 168
9.8 为方程式生成数据文件 171
9.10 为旋转实体生成数据文件 179
9.9 为一个环生成数据文件 179
第十章 生成画面文件 187
10.1 使用程序ScnMaker.c 187
10.2 键盘响应程序 190
10.3 程序ScnMaker.c 190
第三部分 Z缓冲和水平描绘 199
第十一章 Z缓冲理论和数据库结构 199
11.1 比例因子 199
11.2 清除、装入和存储高度数据 199
11.3 获得一个物体文件 203
11.4 显示物体颜色名 203
12.1 键盘响应程序 205
12.2 主函数 205
第十二章 描述文件生成器DesMake.c 205
第十三章 Z缓中描绘程序 213
13.1 屏幕函数 213
13.2 光照模型 213
13.3 装入描述数据 230
13.4 Render.c程序 231
13.5 显示高度区 231
13.6 在屏幕上放置AddOns 232
13.7 Julia集图像 237
13.8 生成溶为一体的天空 239
14.1 为半球生成数据库 241
第十四章 生成并使用Z缓冲区数据库 241
14.2 为半环生成数据库 244
14.3 为方程式生成数据库 247
14.4 生成磁场数据库 251
14.5 在高度数组中寻找最高点和最低点 253
14.6 浏览数据库的一部分 255
14.7 删除不连续的零值 258
第十五章 使用分形程序生成数据库 261
15.1 生成分形山 261
15.2 从Plasmas生成的Mountains 267
15.3 三维Mandelbrot集 268
15.4 三维Julia集 274
15.5 使用Quaternions的分形 278
15.6 四元数学 279
15.7 生成Quaternion分形数据库 282
15.8 抹除高度数据 289
第四部分 光线跟踪 295
第十六章 光线跟踪技术基础 295
16.1 编译器内存方式 297
第十七章 高分辨率图形 299
第十八章 定义画面的.RT文件 329
18.1 格式限制 329
第十九章 光线跟踪程序 371
19.1 光线跟踪概略 371
19.3 装入一个.RT文件 421
19.2 主程序 421
19.4 初始化噪音函数 423
19.5 扫描画面 424
19.6 跟踪光线 424
19.7 确定颜色 427
19.8 生成纹理的表面 427
19.9 结束光线跟踪 428
第二十章 显示光线跟踪文件 429
20.1 生成一个VGA彩色显示 429
附录A 实体建模画面定义文件 437
附录B 光线跟踪中使用的材料 451