标题：计算机图形学实验及课程设计（Visual C++版）
图书信息
普通高等教育“十一五”国家级规划教材，教育部“高等学校教学质量与教学改革工程”立项项目。本书得到2011年山西省重点教改项目“图形图像处理系列课程实践教学资源与平台的建设”的资助 
作者：孔令德 
出版：清华大学出版社
ISBN：9787302243519
定价：39.5元
印次：1-1
装帧：平装
印刷日期：2012-2-29
图书简介
本书是《计算机图形学基础教程（Visual C++版）》(ISBN 978-7-302-17082-2)教材的配套实验教材，提供了18个综合性教学实验和5个课程设计项目，可以满足计算机图形学课堂上机实验和设计周课程设计任务。实验项目编排上由浅入深，通过定义基础类、直线类、变换类、填充类、光照类，最终构造了三维动态光照场景。本书的全部内容都基于MFC框架完成，彩插中展示的所有图形均使用CDC类的SetPixel()成员函数绘制，未包含任何图形学库。教学实验和课程设计项目的开发过程按照OpenGL的操作流程编写，易于引导读者从图形学的原理领域进入到应用领域。 
本书的教学实验和课程设计项目的源代码和实验拓展项目的可执行文件全部提供在笔者的个人网站上，请读者下载后参照源代码学习。通读本书，读者可以轻松掌握柏拉图正多面体（正四面体、正六面体、正八面体、正十二面体和正二十面体）、球体、圆环等三维物体的线框模型、表面模型的建模方法。在三维动态光照场景中，可以调整物体表面模型的材质、添加纹理细节，改变视点和光源的位置，完成三维真实感图形的动态绘制。
本书内容全面、案例丰富、注重理实一体化，适合作为本科计算机图形学的实验和课程设计教材。本书为源代码提供了详尽的注释，可供计算机图形学爱好者从编程的角度理解和掌握计算机图形学原理。
目录
第一部分 教 学 实 验实验任务书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 定义颜色类CRGB28
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 设计包含齐次坐标的二维点类CP268
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 定义矢量类CVector151
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 设计光源类CLight205
15.5.3 设计材质类CMaterial207
15.5.4 设计光照类CLighting208
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课程设计I 基本图元光栅扫描演示系统259
I.1 设计目标259
I.2 设计效果259
I.3 总体设计261
I.4 类的设计262
I.5 视图的设计278
I.6 结论289课程设计II 递归动态球体演示系统291
II.1 设计目标291
II.2 设计效果291
II.3 总体设计293
II.4 类的设计294
II.5 视图的设计297
II.6 结论306课程设计III 圆环动态纹理演示系统308
III.1 设计目标308
III.2 设计效果308
III.3 总体设计310
III.4 类的设计314
III.5 视图的设计334
III.6 结论343课程设计IV 动态光源演示系统345
IV.1 设计目标345
IV.2 设计效果345
IV.3 总体设计347
IV.4 类的设计347
IV.5 视图的设计353
IV.6 结论356课程设计V 3DS接口演示系统358
V.1 设计目标358
V.2 设计效果359
V.3 总体设计359
V.4 类的设计361
V.5 视图的设计369
V.6 结论373参考文献374