第一部分 教学实验实验任务书 3
实验1 绘制金刚石图案 4
1.1 实验目的 4
1.2 实验要求 4
1.3 效果图 4
1.4 实验准备 5
1.5 实验步骤 5
1.5.1 创建Test工程实验框架 5
1.5.2 绘制金刚石图案 15
1.5.3 写出实验报告 24
1.6 思考与练习 24
实验2 绘制任意斜率的直线段 27
2.1 实验目的 27
2.2 实验要求 27
2.3 效果图 27
2.4 实验准备 28
2.5 实验步骤 28
2.5.1 定义颜色类CRGB 28
2.5.2 设计CLine直线类 31
2.5.3 消息映射 36
2.5.4 写出实验报告 40
2.6 思考与练习 40
实验3 交互式绘制多边形 44
3.1 实验目的 44
3.2 实验要求 44
3.3 效果图 44
3.4 实验准备 45
3.5 实验步骤 45
3.5.1 人机交互技术 45
3.5.2 双缓冲技术 47
3.5.3 绘制多边形 48
3.5.4 设计CPtrArray类 48
3.5.5 有效边表填充算法 49
3.5.6 写出实验报告 57
3.6 思考与练习 57
实验4 二维几何变换 60
4.1 实验目的 60
4.2 实验要求 60
4.3 效果图 60
4.4 实验准备 61
4.5 实验步骤 61
4.5.1 静态切分视图框架 61
4.5.2 设计左窗格视图 64
4.5.3 设计CTestDoc类 68
4.5.4 设计包含齐次坐标的二维点类CP2 68
4.5.5 设计二维几何变换类 69
4.5.6 设计双缓冲 73
4.5.7 读入图形顶点 74
4.5.8 绘制图形 74
4.5.9 碰撞检测 75
4.5.10 定时器函数 75
4.5.11 禁止背景刷新函数 76
4.5.12 写出实验报告 76
4.6 思考与练习 76
实验5 直线段裁剪 79
5.1 实验目的 79
5.2 实验要求 79
5.3 效果图 79
5.4 实验准备 80
5.5 实验步骤 80
5.5.1 定义CP2类 80
5.5.2 OnDrw()函数 81
5.5.3 绘制裁剪窗口 81
5.5.4 鼠标左键按下函数 82
5.5.5 鼠标移动函数 82
5.5.6 编码函数 83
5.5.7 裁剪函数 84
5.5.8 写出实验报告 86
5.6 思考与练习 86
实验6 立方体线框模型正交投影 88
6.1 实验目的 88
6.2 实验要求 88
6.3 效果图 88
6.4 实验准备 89
6.5 实验步骤 89
6.5.1 立方体数学模型 89
6.5.2 三维变换 90
6.5.3 正交投影 92
6.5.4 设计三维点类 92
6.5.5 定义三维变换类 94
6.5.6 定义点表 99
6.5.7 定义面表 99
6.5.8 绘制立方体线框模型 100
6.5.9 键盘控制 100
6.5.10 动画控制 101
6.5.11 写出实验报告 103
6.6 思考与练习 103
实验7 方体线框模型透视投影 105
7.1 实验目的 105
7.2 实验要求 105
7.3 效果图 105
7.4 实验准备 106
7.5 实验步骤 106
7.5.1 透视投影变换的实现 108
7.5.2 定义点表 109
7.5.3 定义面表 110
7.5.4 绘制立方体 110
7.5.5 缩小立方体 111
7.5.6 放大立方体 111
7.5.7 写出实验报告 111
7.6 思考与练习 111
实验8 动态三视图 114
8.1 实验目的 114
8.2 实验要求 114
8.3 效果图 114
8.4 实验准备 115
8.5 实验步骤 115
8.5.1 建立多面体的数据结构 115
8.5.2 创建2×2静态切分窗格 116
8.5.3 建立齐次三维点类 116
8.5.4 建立表面类 118
8.5.5 内存复制 119
8.5.6 三视图变换矩阵 120
8.5.7 矩阵相乘函数 122
8.5.8 绘制多面体斜等测图 122
8.5.9 绘制三视图 124
8.5.10 写出实验报告 124
8.6 思考与练习 124
实验9 动态绘制Bezier曲线 127
9.1 实验目的 127
9.2 实验要求 127
9.3 效果图 127
9.4 实验准备 128
9.5 实验步骤 128
9.5.1 Bezier曲线的分割递推德卡斯特里奥算法 128
9.5.2 德卡斯特里奥函数 129
9.5.3 绘制Bezier曲线 130
9.5.4 绘制控制多边形 130
9.5.5 鼠标左键按下函数 131
9.5.6 鼠标右键按下函数 132
9.5.7 鼠标移动函数 132
9.5.8 写出实验报告 132
9.6 思考与练习 133
实验10 交互式三次B样条曲线 135
10.1 实验目的 135
10.2 实验要求 135
10.3 效果图 135
10.4 实验准备 136
10.5 实验步骤 136
10.5.1 三次B样条曲线的几何性质 136
10.5.2 绘制控制多边形 137
10.5.3 绘制三次B样条曲线 138
10.5.4 鼠标移动函数 138
10.5.5 写出实验报告 139
10.6 思考与练习 139
实验11 旋转的Koch雪花 142
11.1 实验目的 142
11.2 实验要求 142
11.3 效果图 142
11.4 实验准备 143
11.5 实验步骤 143
11.5.1 Koch曲线的生成元 143
11.5.2 绘制Koch雪花 144
11.5.3 双缓冲函数 145
11.5.4 分形函数 146
11.5.5 Koch函数 147
11.5.6 写出实验报告 147
11.6 思考与练习 147
实验12 颜色渐变立方体 150
12.1 实验目的 150
12.2 实验要求 150
12.3 效果图 150
12.4 实验准备 151
12.5 实验步骤 151
12.5.1 定义矢量类CVector 151
12.5.2 定义颜色点类 154
12.5.3 定义点表 155
12.5.4 定义面表 156
12.5.5 绘制物体 156
12.5.6 颜色渐变有效边表填充算法 157
12.5.7 写出实验报告 165
12.6 思考与练习 165
实验13 地理划分线框球 169
13.1 实验目的 169
13.2 实验要求 169
13.3 效果图 169
13.4 实验准备 170
13.5 实验步骤 170
13.5.1 球体数学模型 170
13.5.2 绘制球体 173
13.5.3 写出实验报告 175
13.6 思考与练习 175
实验14 交叉条消隐 180
14.1 实验目的 180
14.2 实验要求 180
14.3 效果图 180
14.4 实验准备 181
14.5 实验步骤 181
14.5.1 交叉条数学模型 181
14.5.2 叠加条数学模型 183
14.5.3 消隐算法 184
14.5.4 定义深度缓冲点表 185
14.5.5 定义深度排序点表 186
14.5.6 设置坐标系 187
14.5.7 禁用深度缓冲绘制交叉条 187
14.5.8 启用深度缓冲绘制交叉条 188
14.5.9 深度排序函数 188
14.5.10 设置背景色为黑色 189
14.5.11 深度缓冲消隐算法 189
14.5.12 写出实验报告 199
14.6 思考与练习 199
实验15 方体光照模型 201
15.1 实验目的 201
15.2 实验要求 201
15.3 效果图 201
15.4 实验准备 202
15.5 实验步骤 202
15.5.1 简单光照模型 202
15.5.2 设计光源类CLight 205
15.5.3 设计材质类CMaterial 207
15.5.4 设计光照类CLighting 208
15.5.5 设计默认光源颜色和材质颜色 210
15.5.6 设计红色、绿色和蓝色光源菜单项 211
15.5.7 设计红宝石、绿宝石和蓝宝石材质菜单项 212
15.5.8 设计变换类 212
15.5.9 写出实验报告 217
15.6 思考与练习 217
实验16 球体Gouraud光照模型 220
16.1 实验目的 220
16.2 实验要求 220
16.3 效果图 220
16.4 实验准备 221
16.5 实验步骤 221
16.5.1 双线性光强插值模型 221
16.5.2 设置光源颜色和材质颜色 221
16.5.3 读入顶点表 222
16.5.4 读入面表 223
16.5.5 计算面片顶点的颜色 224
16.5.6 绘制球面 224
16.5.7 写出实验报告 226
16.6 思考与练习 226
实验17 球体Phong光照模型 228
17.1 实验目的 228
17.2 实验要求 228
17.3 效果图 228
17.4 实验准备 229
17.5 实验步骤 229
17.5.1 Phong双线性法矢插值模型 229
17.5.2 修改CAET类 230
17.5.3 修改CZBuffer类 230
17.5.4 光照环境初始化 239
17.5.5 绘制球面函数 240
17.5.6 写出实验报告 241
17.6 思考与练习 241
实验18 立方体纹理映射 244
18.1 实验目的 244
18.2 实验要求 244
18.3 效果图 244
18.4 实验准备 245
18.5 实验步骤 245
18.5.1 定义CFace类 245
18.5.2 读入位图纹理 246
18.5.3 定义面表 247
18.5.4 绘制立方体 249
18.5.5 填充立方体表面 249
18.5.6 写出实验报告 252
18.6 思考与练习 252
第二部分 课程设计课程设计任务书 257
课程设计Ⅰ 基本图元光栅扫描演示系统 259
Ⅰ.1 设计目标 259
Ⅰ.2 设计效果 259
Ⅰ.3 总体设计 261
Ⅰ.4 类的设计 262
Ⅰ.5 视图的设计 278
Ⅰ.6 结论 289
课程设计Ⅱ 递归动态球体演示系统 291
Ⅱ.1 设计目标 291
Ⅱ.2 设计效果 291
Ⅱ.3 总体设计 293
Ⅱ.4 类的设计 294
Ⅱ.5 视图的设计 297
Ⅱ.6 结论 306
课程设计Ⅲ 圆环动态纹理演示系统 308
Ⅲ.1 设计目标 308
Ⅲ.2 设计效果 308
Ⅲ.3 总体设计 310
Ⅲ.4 类的设计 314
Ⅲ.5 视图的设计 334
Ⅲ.6 结论 343
课程设计Ⅳ 动态光源演示系统 345
Ⅳ.1 设计目标 345
Ⅳ.2 设计效果 345
Ⅳ.3 总体设计 347
Ⅳ.4 类的设计 347
Ⅳ.5 视图的设计 353
Ⅳ.6 结论 356
课程设计Ⅴ 3DS接口演示系统 358
Ⅴ.1 设计目标 358
Ⅴ.2 设计效果 359
Ⅴ.3 总体设计 359
Ⅴ.4 类的设计 361
Ⅴ.5 视图的设计 369
Ⅴ.6 结论 373
参考文献 374