笔者花费了七年多时间,打造了“省级精品课程+系列化教材+数字化教学资源”立体化图形学教学平台。2006年建设完成山西省省级精品课程“C++程序设计”后,直接基于Visual C++中的MFC框架,采用案例化教学方法建设了“计算机图形学”教学资源。2008年笔者主持的“计算机图形学”课程被评为山西省省级精品课程之后,出版了《计算机图形学基础教程(Visual C++版)》、《计算机图形学实践教程(Visual C++版)》两本教材,并双双获得兵工高校优秀教材一等奖,随后相继出版了《计算机图形学基础教程(Visual C++版)习题解答与编程实践》、《计算机图形学实验及课程设计(Visual C++版)》等系列教材,其中《计算机图形学实践教程(Visual C++版)》提供了与《计算机图形学基础教程(Visual C++版)》中所讲解原理一一对应的案例,共计43个案例。这些案例被国内的近百所院校试用后,给予了肯定。下面某高校教师对本书的评价:
“教材提供了丰富的教学资源,涵盖了计算机图形学原理的主要知识点,由于采用VC++的MFC编程可以模拟真实感光照以及纹理等效果,对学生很有吸引力,对提升计算机图形学的教学效果也很有帮助。原理的案例化可以让学生面对枯燥的图形数学模型及绘制算法,能尽快直观地体验到真实效果并深刻理解绘制算法的原理”.
下面是某高校本科生对本书的评价:
“我是一名三年级本科生,学校开设了计算机图形学这门课程,出于兴趣,我也选择这门课程,并且很荣幸地读到了您的作品。清晰的讲解也给我留下了很深刻的印象 ,我甚至可以不用听老师讲解就可以通过看书将后面的大部分习题解决出来。当优美的图形在我点下那个感叹号后突然显示的时候,那种感觉是美妙的!"
读者的肯定是改版的动力。本书第2版在保留第1版体系结构的基础上,重写了全书所有章节,调整了三维坐标系z轴的指向,完善了光照模型、新增了简单透明模型、简单阴影模型、图像纹理、几何纹理等内容。相应地,《计算机图形学实践教程(Visual C++版)(第2版)》中的案例也由43个扩充为60个。
笔者将《计算机图形学实践教程(Visual C++版)(第2版)》的60个案例、《计算机图形学基础教程(Visual C++版)习题解答与编程实践》的近200个习题解答与拓展案例、《计算机图形学实验及课程设计(Visual C++版)》的18个上机实验与5个课程设计案例集结一起建设了计算机图形学实践教学资源库。并将全部资源提供在笔者的个人网站: http: //www.klingde.com上。网站上同时提供的还有《计算机图形学基础教程(Visual C++版)(第2版)》的教案和课件。2010年笔者主持完成的“应用型工科院校计算机图形学教学模式的改革与实践”项目被评为山西省教学成果二等奖。该成果建议教师课堂教学采用“演示案例”、“讲解原理”、“学习代码”、“拓展案例”的教学模式讲授计算机图形学课程,以形象化的案例激发起学生学习计算机图形学的主动性。2012年笔者主持的“计算机图形学实践教学资源库的建设”被评为山西省教学成果一等奖。该成果将计算机图形学实践教学资源划分为“验证性资源”、“综合性资源”、“创新性资源”和“工程化资源”4个部分,涵盖了前面介绍的近300个案例以及20个3ds max模型。
虽然计算机图形学领域每年有大量的新技术不断涌现,但最基本的原理和方法却保持着稳定性和连贯性。笔者是从计算机编程角度讲授计算机图形学原理,在不使用任何图形库的前提下,仅单纯使用MFC的绘制像素点函数,按照计算机图形学的基本原理开发出与OpenGL或Direct3D显示效果一致的真实感图形。更确切的说法是笔者依据本书讲解的原理搭建了一个自己的图形库。只要在场景中构造出物体的几何模型,就可以根据假定的光照条件下,动态渲染出包含材质、纹理的真实感图形,产生如临其境、如见其物的视觉效果。
用算法实现本书讲到的所有原理,调试程序需要花费很长时间,正是因为有幸得到博创研究所廖小谊、左亮亮、潘晓、宋准、孙立广、高腾等人的协助,使用MFC框架开发了本书所有原理的案例源代码,才使得案例以漂亮的效果出现在读者面前。
希望本书的出版对计算机图形学的教学有所帮助,感谢国内高校师生对笔者第1版作品的肯定。同时也恳请教学一线的计算机图形教师继续提出宝贵的意见和建议。笔者E-mail: klingde@163.com, QQ: 997796978.
本书配套的《计算机图形学实践教程(Visual C++版)(第2版)》中60个案例的设置与本书章节的对应关系见附录A.
本书得到2011年山西省重点教改项目“图形图像处理系列课程实践教学资源与平台的建设”的资助。
孔令德2012年10月第1版前言
计算机图形学(computer graphics, CG)是研究如何利用计算机算法来生成、处理和显示图形的一门学科。主要的算法原理包括基于光栅扫描显示器的基本图形扫描转换原理;基于齐次坐标的二维、三维图形的几何变换原理;基于几何造型的自由曲线、曲面的生成原理;基于分形几何学的分数维造型原理;基于图像空间和物体空间的三维物体动态消隐原理;基于颜色模型、光照模型和纹理映射技术的真实感图形显示原理。
本书有以下特色。
(1) 编程环境的先进性。本书采用Visual C++ 6.0编程环境进行算法讲解。目前市面上的计算机图形学教材大多采用Turbo C语言作为编程环境,但面向过程语言Turbo C开发的程序是基于DOS界面的,图形操作基本不具备交互性,而且只能显示256种颜色,无法生成真实感光照图形。本书选用了Microsoft公司的面向对象程序设计语言Visual C++ 6.0的MFC框架作为编程环境,不仅可以制作出和3ds效果一致的三维真实感图形,而且支持交互式操作。本书的彩插效果图全部使用MFC框架制作,并没有借助OpenGL或DirectX等图形库的支持。
(2) 所有原理算法的案例化。计算机图形学,原理众多、算法复杂。作为省级精品课程“计算机图形学”和“C++程序设计”的第一负责人,笔者在十多年的计算机图形学教学实践中,使用Visual C++ 6.0的MFC框架自主开发了所有原理的实现程序,做到了本书所讲解到的每个原理在配套的实践教程中都有相应的算法实现案例。
(3) 编写内容的系统化。本书配有实践教程。本书分为10章,实践教程包含和本书对应的43个案例。两本书的内容均由同一作者编写,保证了编写体系的一致性。
本书各章节主要内容如下。
第1章 导论。介绍了计算机图形学的应用领域,以及图形显示设备的发展历程。
第2章 Visual C++ 6.0 绘图基础。介绍面向对象程序设计基础、MFC上机操作步骤以及CDC类的基本绘图函数。
第3章 基本图形的扫描转换。讲解直线、圆、椭圆的像素级扫描转换原理,以及反走样技术。
第4章 多边形填充。讲解了实面积图形的概念,有效边表填充原理和算法,边缘填充原理和算法、区域填充原理和算法。
第5章 二维变换与裁剪。讲解齐次坐标,平移、比例、旋转、反射和错切的二维基本几何变换矩阵,Cohen\|Sutherland直线段裁剪原理和算法,中点分割直线段裁剪原理和算法,以及Liang-Barsky直线段裁剪原理和算法。
第6章 三维变换与投影。讲解平移、比例、旋转、反射和错切的三维基本几何变换矩阵、三视图、斜轴侧图以及透视投影的变换矩阵。
第7章 自由曲线与曲面。讲解三次参数样条曲线、Bezier曲线曲面和B样条曲线曲面的生成原理和算法。
第8章 分形几何。讲解分形曲线的递归模型、植物的L-系统模型,以及IFS 迭代函数系统等的原理和算法。
第9章 建模与消隐。讲解动态凸多面体和曲面体的隐线原理和算法,动态Z-Buffer的隐面原理和算法,以及画家算法的隐面原理和算法。
第10章 真实感图形。讲解RGB颜色模型、Gouraud明暗处理、Phong明暗处理、光照模型,以及纹理映射技术的原理和算法。
实践教程的案例设置和本书的对应关系参见附录A.
经过历时3年的编写,本书终于要和读者见面了,其间的艰辛一言难尽。由于要用算法实现本书讲到的所有原理,程序调试花费了很长时间。幸喜在博创研究所的工作人员的协助下,使用Visual C++的MFC框架完成了本书所有原理的算法实现,本书也得以完稿。
感谢在博创研究所先后工作的人员廖小谊、彭贺亮、刘鹏、申明达、傅立群、杨铭等在程序调试方面作出的贡献。
本书及其配套的实践教程适合作为计算机科学与技术专业的本科教材。欢迎访问笔者个人网站:http://www.klingde.com下载《计算机图形学实践教程(Visual C++版)》的43个源程序、教案、电子课件和习题解答源程序等相关的教学资源。
希望本书的出版对读者有所帮助,请计算机图形学方面的专家提出宝贵意见,同时也希望能和广大的计算机图形学教师进行学术交流。