《计算机图形学:基于MFC三维图形开发》采用面向对象语言visualc++的mfc框架作为开发平台,系统讲解“基本图元的扫描转换”、“二维变换与裁剪”、“三维变换与投影”、“自由曲线与曲面”、“建模与消隐”、“光照模型”与“纹理映射”的实现原理与算法。
计算机图形学是利用计算机研究图形的表示、生成、处理和显示的学科。主要原理包括基于光栅扫描显示器的基本图形的扫描转换原理;基于齐次坐标的二维、三维图形的几何变换原理;基于几何造型的自由曲线、曲面的生成原理;基于多面体和曲面体的三维几何建模原理;基于像空间和物空间的三维物体面消隐原理;基于材质模型、光源模型的简单光照原理;基于颜色纹理、三维纹理和几何纹理的纹理映射原理。本书采用类架构建立了三维光照场景,给定光源位置、视点位置和视线方向,只要简单地改变数据文件中物体的顶点表和表面表,就可以生成不同物体的真实感图形动画。
本书有以下特色。
1. 编程环境的先进性。本书选用了Microsoft公司的面向对象程序设计语言Visual C++的MFC框架作为编程环境,不仅可以制作出和3ds max效果一致的三维真实感图形,而且支持交互式操作。
2. 所有原理的案例化。本书从编程角度讲解计算机图形学,要求所讲解的原理都产生相应的图形效果。笔者使用MFC框架自主开发了本书所有原理的案例,做到本书所讲解到的每个原理都有一个对应的源程序。
3. 所有图形彩色显示。计算机图形学是研究由物体的三维几何模型得到二维图像的技术。本书使用真彩色表示光照、纹理等特殊图像效果,意在让读者切实感受到计算机图形学的视觉冲击力,从而将学习的重点放置在真实感图形部分。
本书各章节主要内容如下。
第1章导论。介绍了计算机图形学的定义、应用领域、图形显示器的工作原理以及计算机图形学目前研究的热点技术。
第2章MFC绘图基础。介绍MFC上机操作步骤,主要讲解了CDC类的主要绘图成员函数,最后给出了精美的双缓冲动画案例。本章要求重点掌握双缓冲技术。
第3章基本图元的扫描转换。讲解直线、圆和椭圆的像素级扫描转换原理,以及Wu直线反走样算法。本章要求重点掌握直线的中点Bresenham扫描转换原理和Wu反走样原理。
第4章多边形填充。讲解了有效边表填充原理、边缘填充原理以及区域填充原理,本章要求重点掌握有效边表填充原理,这是后续填充三维物体表面模型的基本原理。
第5章二维变换与裁剪。讲解二维基本几何变换矩阵,CohenSutherland直线段裁剪原理、中点分割直线段裁剪原理、LiangBarsky直线段裁剪原理以及SutherlandHodgman多边形裁剪原理。本章要求重点掌握二维几何变换。
第6章三维变换与投影。讲解三维基本几何变换、三视图、斜投影图以及透视投影的变换矩阵。本章要求重点掌握三维几何变换和透视投影原理。
第7章自由曲线与曲面。讲解Bezier曲线曲面和B样条曲线曲面的生成原理。本章要求重点掌握B样条曲线和B样条曲面的生成原理。
第8章建模与消隐。讲解描述物体的双表数据结构,多面体与曲面体的几何模型。物体的背面剔除原理以及深度缓冲面消隐和深度排序面消隐原理。本章要求重点掌握立方体、球体的几何建模方法,以及深度缓冲面消隐原理。
第9章光照模型。讲解颜色模型、材质模型、简单光照模型、Gouraud明暗处理、Phong明暗处理、简单透明模型和简单阴影模型。本章要求重点掌握RGB颜色模型、简单光照模型、Gouraud明暗处理和Phong明暗处理。
第10章纹理映射。讲解颜色纹理、三维纹理和几何纹理的定义及映射方法。给出了将函数纹理与图像纹理映射到球面、圆柱面、圆锥面和圆环面的方法,最后介绍了一种简单纹理反走样方法。本章要求重点掌握国际象棋棋盘函数纹理映射到立方体表面和球体表面的颜色纹理映射方法。
为了帮助读者巩固上述原理的学习,笔者精心设计了与本书讲解的原理一一对应的60个案例源程序。每个案例全部按照本书原理的算法步骤编码,可以互相参照学习。本书中所使用的效果图均出自这些案例。请购买本书的读者到笔者的个人网站上下载这60个源程序。为了方便教学,笔者也提供了各章的教学课件,并建立了计算机图形学教师群,愿意与全国高校的计算机图形学教师一起分享教学经验。
虽然计算机图形学领域每年有大量的新技术不断涌现,但绘制图形的基本原理和方法却一直保持着连贯性和稳定性。笔者是从计算机编程角度讲授计算机图形学原理,在不使用任何图形库的前提下,单纯使用MFC的绘制像素点成员函数(CDC::SetPixelV),按照本书讲解的计算机图形学原理开发出与OpenGL或Direct3D显示效果一致的真实感图形。更确切地说是笔者依据本书讲解的原理搭建了一个自主开发的图形库。只要在场景中构造出物体的几何模型,就可以根据假定的光照条件,动态渲染出包含材质、纹理的真实感图形,产生如临其境、如见其物的视觉效果。
感谢清华大学出版社编校人员对本书的大力支持,感谢国内计算机图形学教师对笔者的认可,感谢计算机图形学读者对源程序的厚爱。恳请从事计算机图形研究的专家学者继续提出宝贵的建议和意见,无论是针对文字、代码还是课件的。如果读者在学习期间有什么疑问,请添加笔者的QQ进行联系或者QQ留言,笔者将提供在线帮助。也可以通过QQ邮箱给笔者来信。笔者的QQ号及计算机图形学群号参见封底。
最后感谢我的妻子康凤娥女士。在我写作本书期间,给予了更多的时间;在我调试程序时,曾提出过宝贵的建议;在我完成初稿后,又进行反复校对。 “噫!微斯人,吾谁与归?”
孔令德
2013年9月
孔令德,教授。山西省教学名师,山西省模范教师。太原市尖草坪区第三、四届政协委员。山西省计算机学会常务理事。
2006年主持山西省精品课程“c++程序设计”:2008年主持的教改项目“计算机软件课程群工程化建设”被评为山西省教学成果二等奖。
2008午主持山西省精品课程“计算机图形学”;2010年主持的教学改革项目“应用型工科院校计算机图形学教学模式的改革与实践”被评为山西省教学成果二等奖;2011年主持山西省重点教学改革项目“图形图像处理系列课程实践教学资源与平台的建设”;2012年主持的教学改革项目“计算机图形学实践教学资源库的建设”被评为山西省教学成果一等奖。2013年负责的“计算机工程实验教学中心”被评为“十二五”山西省高等学校实验示范中心。2013年负责的“计算机科学与技术专业”被评为山西省高等学校本科特色专业。2013午被授予山西省高等学校131领军人才的“优秀中青年拔尖创新人才”称号。
第1章 导论
1.1 计算机图形学的定义
1.2 计算机图形学的应用领域
1.2.1 计算机游戏
1.2.2 计算机辅助设计
1.2.3 计算机艺术
1.2.4 虚拟现实
1.2.5 计算机辅助教学
1.3 计算机图形学的相关学科
1.4 计算机图形学的确立与发展
1.5 图形显示器的发展及其工作原理
1.5.1 阴极射线管
1.5.2 随机扫描图形显示器
1.5.3 直视存储管图形显示器
1.5.4 光栅扫描图形显示器
第1章 导论
1.1 计算机图形学的定义
1.2 计算机图形学的应用领域
1.2.1 计算机游戏
1.2.2 计算机辅助设计
1.2.3 计算机艺术
1.2.4 虚拟现实
1.2.5 计算机辅助教学
1.3 计算机图形学的相关学科
1.4 计算机图形学的确立与发展
1.5 图形显示器的发展及其工作原理
1.5.1 阴极射线管
1.5.2 随机扫描图形显示器
1.5.3 直视存储管图形显示器
1.5.4 光栅扫描图形显示器
1.5.5 LCD显示器
1.5.6 三维图形显示原理及立体显示器
1.6 图形软件标准
1.7 计算机图形学研究的热点技术
1.7.1 细节层次技术
1.7.2 基于图像的绘制技术
1.8 本章小结
习题1
第2章 MFC绘图基础
2.1 MFC上机操作步骤
2.2 MFC绘图方法
2.2.1 CDC类结构与GDI对象
2.2.2 映射模式
2.2.3 使用GDI对象
2.2.4 CDC类的主要绘图成员函数
2.3 设备上下文的调用与释放
2.4 双缓冲机制
2.5 MFC绘图的几种方法
2.5.1 使用OnDraw()成员函数直接绘图
2.5.2 使用菜单绘图
2.5.3 使用自定义函数绘图
2.6 本章小结
习题2
第3章 基本图元的扫描转换
3.1 直线的扫描转换
3.1.1 算法原理
3.1.2 构造中点误差项
3.1.3 递推公式
3.1.4 整数化处理
3.2 圆的扫描转换
3.2.1 算法原理
3.2.2 构造中点误差项
3.2.3 递推公式
3.3 椭圆的扫描转换
3.3.1 算法原理
3.3.2 构造上半部分椭圆弧的中点误差项
3.3.3 上半部分椭圆弧的递推公式
3.3.4 构造下半部分椭圆弧的中点误差项
3.3.5 下半部分椭圆弧的递推公式
3.4 反走样技术
3.5 Wu反走样算法
3.5.1 算法原理
3.5.2 构造距离误差项
3.5.3 计算机化
3.5.4 彩色直线段的反走样
3.6 本章小结
习题3
第4章 多边形填充
4.1 多边形的扫描转换
4.1.1 多边形的定义
4.1.2 多边形的表示
4.1.3 多边形着色模式
4.1.4 多边形填充算法
4.1.5 区域填充算法
4.2 有效边表填充算法
4.2.1 填充原理
4.2.2 边界像素的处理原则
4.2.3 有效边和有效边表
4.2.4 桶表与边表
4.3 边缘填充算法
4.3.1 填充原理
4.3.2 填充过程
4.4 区域填充算法
4.4.1 填充原理
4.4.2 四邻接点与八邻接点
4.4.3 四连通域与八连通域
4.4.4 种子填充算法
4.5 本章小结
习题4
第5章 二维变换与裁剪
5.1 图形几何变换基础
5.1.1 二维变换矩阵
5.1.2 规范化齐次坐标
5.1.3 矩阵相乘
5.1.4 二维几何变换
5.2 二维基本几何变换矩阵
5.2.1 平移变换矩阵
5.2.2 比例变换矩阵
5.2.3 旋转变换矩阵
5.2.4 反射变换矩阵
5.2.5 错切变换矩阵
5.3 二维复合变换
5.3.1 复合变换原理
5.3.2 相对于任意参考点的二维几何变换
5.3.3 相对于任意方向的二维几何变换
5.4 二维图形裁剪
5.4.1 图形学中常用的坐标系
5.4.2 窗口与视区及窗视变换
5.4.3 窗视变换矩阵
5.5 CohenSutherland直线段裁剪算法
5.5.1 编码原理
5.5.2 裁剪步骤
5.5.3 交点计算公式
5.6 中点分割直线段裁剪算法
5.6.1 中点分割直线段裁剪算法原理
5.6.2 中点计算公式
5.7 Liang Barsky直线段裁剪算法
5.7.1 算法原理
5.7.2 算法分析
5.7.3 算法的几何意义
5.8 多边形裁剪算法
5.9 本章小结
习题5
第6章 三维变换与投影
6.1 三维图形几何变换
6.1.1 三维变换矩阵
6.1.2 三维几何变换
6.2 三维基本几何变换矩阵
6.2.1 平移变换
6.2.2 比例变换
6.2.3 旋转变换
6.2.4 反射变换
6.2.5 错切变换
6.3 三维复合变换
6.3.1 相对于任意参考点的三维几何变换
6.3.2 相对于任意方向的三维几何变换
6.4 平行投影
6.4.1 正投影
6.4.2 三视图
6.4.3 斜投影
6.5 透视投影
6.5.1 透视投影坐标系
6.5.2 三维坐标系变换
6.5.3 世界坐标系到观察坐标系的变换
6.5.4 观察坐标系到屏幕坐标系的变换
6.5.5 透视投影分类
6.5.6 立方体的透视图
6.5.7 屏幕坐标系的伪深度坐标
6.6 本章小结
习题6
第7章 自由曲线与曲面
7.1 基本概念
7.1.1 样条曲线曲面
7.1.2 曲线曲面的表示形式
7.1.3 插值、逼近与拟合
7.1.4 连续性条件
7.2 Bezier曲线
7.2.1 Bezier曲线的定义
7.2.2 Bezier曲线的性质
7.2.3 de Casteljau递推算法
7.2.4 Bezier曲线的拼接
7.3 Bezier曲面
7.3.1 Bezier曲面的定义
7.3.2 双三次Bezier曲面的定义
7.3.3 双三次Bezier曲面的拼接
7.4 B样条曲线
7.4.1 B样条曲线的定义
7.4.2 二次B样条曲线
7.4.3 三次B样条曲线
7.4.4 B样条曲线的性质
7.4.5 构造特殊三次B样条曲线的技巧
7.5 B样条曲面
7.5.1 B样条曲面的定义
7.5.2 双三次B样条曲面的定义
7.5.3 双三次B样条曲面的连续性
7.6 本章小结
习题7
第8章 建模与消隐
8.1 三维物体的数据结构
8.1.1 物体的几何信息与拓扑信息
8.1.2 三表数据结构
8.1.3 物体的表示模型
8.1.4 双表数据结构
8.2 常用物体的几何模型
8.2.1 多面体
8.2.2 曲面体
8.3 消隐算法分类
8.4 隐线算法
8.4.1 凸多面体消隐算法
8.4.2 曲面体消隐算法
8.5 隐面算法
8.5.1 深度缓冲器消隐算法
8.5.2 深度排序消隐算法
8.6 本章小结
习题8
第9章 光照模型
9.1 颜色模型
9.1.1 原色系统
9.1.2 RGB颜色模型
9.1.3 HSV颜色模型
9.1.4 CMYK颜色模型
9.2 简单光照模型
9.2.1 材质模型
9.2.2 环境光模型
9.2.3 漫反射光模型
9.2.4 镜面反射光模型
9.2.5 光强衰减
9.2.6 增加颜色
9.3 光滑着色
9.3.1 直线的光滑着色
9.3.2 Gouraud明暗处理
9.3.3 Phong明暗处理
9.4 简单透明模型
9.5 简单阴影模型
9.6 本章小结
习题9
第10章 纹理映射
10.1 纹理的定义
10.2 颜色纹理
10.2.1 函数纹理
10.2.2 图像纹理
10.3 三维纹理
10.4 几何纹理
10.4.1 参数曲面的定义
10.4.2 映射原理
10.4.3 几何纹理的分类
10.5 简单纹理反走样
10.6 本章小结
习题10
附录A配套案例的说明
参考文献