图书前言

出 版 说 明

我国高等学校计算机教育近年来迅猛发展,应用所学计算机知识解决实际问题,已经成为当代大学生的必备能力。

时代的进步与社会的发展对高等学校计算机教育的质量提出了更高、更新的要求。现在,很多高等学校都在积极探索符合自身特点的教学模式,涌现出一大批非常优秀的精品课程。

为了适应社会的需求,满足计算机教育的发展需要,清华大学出版社在进行了大量调查研究的基础上,组织编写了“高等学校计算机专业教材精选”。本套教材从全国各高校的优秀计算机教材中精挑细选了一批很有代表性且特色鲜明的计算机精品教材,把作者们对各自所授计算机课程的独特理解和先进经验推荐给全国师生。

本套教材的特点如下。

(1) 编写目的明确。本套教材主要面向广大高校的计算机专业学生,使学生通过本套教材,学习计算机科学与技术方面的基本理论和基本知识,接受应用计算机解决实际问题的基本训练。

(2) 注重编写理念。本套教材作者群为各高校相应课程的主讲,有一定经验积累,且编写思路清晰,有独特的教学思路和指导思想,其教学经验具有推广价值。本套教材中不乏各类精品课配套教材,并力图努力把不同学校的教学特点反映到每本教材中。

(3) 理论知识与实践相结合。本套教材贯彻从实践中来到实践中去的原则,教材中的许多必须掌握的理论都将结合实例来讲,同时注重培养学生分析、解决问题的能力,满足社会用人要求。

(4) 易教易用,合理适当。本套教材编写时注意结合教学实际的课时数,把握教材的篇幅。同时,对一些知识点按教育部教学指导委员会的最新精神进行合理取舍与难易控制。

(5) 注重教材的立体化配套。大多数教材都配套教师用课件、习题及其解答,学生上机实验指导、教学网站等辅助教学资源,方便教学。

随着本套教材陆续出版,相信能够得到广大读者的认可和支持,为我国计算机教材建设及计算机教学水平的提高,为计算机教育事业的发展做出应有的贡献。

清华大学出版社第2版前言

近年来,随着游戏产业的迅速发展,计算机专业开设的计算机图形学已经成为计算机游戏和手机游戏开发方向中一门最重要的专业核心课。计算机图形学主要借助计算机来研究图形的表示、生成、处理和显示技术。该学科处于计算机层次结构中的中上层,具有面向应用的重要特性。由于计算机图形学课程的先行课是高等数学、数据结构和程序设计语言等,教学的基本要求根据图形学原理编写相应的算法实现。这对教师和学生的编程要求较高。

笔者选用Visual C++的MFC框架,以生成真实感光照模型为主线,设计并建设了计算机图形学实践教学资源库。该资源库包含近300个案例源程序,涵盖了计算机图形学课堂教学、实验教学、课程设计以及工程化训练全过程。计算机图形学实践教学资源包括“验证性资源”“综合性资源”“创新性资源”和“工程化资源”4个层次。本书给出的源程序属于“综合性资源”和“创新性资源”。2013年,笔者完成的“计算机图形学实践教学资源库建设”项目获山西省教学成果一等奖。2017年,笔者完成的“以应用能力为导向的图形图像特色人才培养模式的探索与实践”获得山西省教学成果特等奖。

在完成建设计算机图形学实践教学资源库的基础上,笔者对计算机图形学课程的课堂教学方法进行改革,提出了“案例演示”→“原理讲解”→“算法实现”→“实践拓展”的4步曲教学模式。在教学过程中采用案例化教学资源,教师首先演示案例,然后讲解原理,进行现场编程,最后给出案例拓展要求。这项改革获得了山西省教学成果二等奖。

2013年课题组出版了《计算机图形学基础教程(Visual C++版)》(第2版)和《计算机图形学实践教程(Visual C++版)(第2版)》。理论方面增加了纹理部分,实践方面提供了60个案例。本书在此基础上进行了修订。主要完成以下两个方面的工作。

(1) 重新规范类的名称。例如变换类更名为CTransform,光源类更名为CLightSource等。

(2) 区分了多面体与曲面体的数据表定义。对于多面体使用CFacet类定义表面,一维顶点数组名为P(代表point),二维表面数组名为F(代表facet);对于曲面体使用CPatch类定义小面,一维顶点数组名为V(代表vertex),二维小面数组名为P(代表patch)。相应地,多面体读入顶点坐标的函数名为ReadPoint,读入表面信息的函数名为ReadFacet;曲面体读入顶点坐标的函数名为ReadVertex,读入表面信息的函数名为ReadPatch。

本书的教学实验部分由康凤娥编写,课程设计部分由孔令德编写,全书由孔令德提出编写原则并统稿。

真诚感谢国内计算机图形学教师给予的厚爱,请继续指出书中的不足,以帮助我们进步。邀请教师加入计算机图形学教师QQ群(群号: 159410090)交流教学经验,获取源程序和课件等。凡是使用本书授课的教师,均可以获得拓展练习题目的源代码。

计算机图形学精品资源共享课网站: http://jsjtxx.tit.edu.cn/。

计算机图形学教学成果展示网站: http://txx.tit.edu.cn/。

孔令德的QQ: 997796978。

孔令德的Email: klingde@163.com。

孔令德2018年4月第1版前言

2008年清华大学出版社出版了笔者编写的《计算机图形学基础教程(Visual C++版)》和《计算机图形学实践教程(Visual C++版)》。《计算机图形学基础教程(Visual C++版)》中讲解的每个原理,在《计算机图形学实践教程(Visual C++版)》中都给出了相应的实现源代码。《计算机图形学实践教程(Visual C++版)》中的43个案例严格按照《计算机图形学基础教程(Visual C++版)》的原理讲解顺序实现,功能单一,仅适合于作为验证性实验,供教师课堂上对照原理讲授,学生课后上机练习。

为了进一步提升本科院校的计算机图形学实验教学质量,本书设计了18个综合性教学实验和5个课程设计项目,可以满足36学时的上机实验和5周的课程设计任务。实验项目参见表1,5个课程设计项目参见表2。表1本书实验与计算机图形学基础教程的对应关系序号实 验 名 称实 验 时 数对应的主教材章节1绘制金刚石图案2第2章2绘制任意斜率的直线段2第3章3交互式绘制多边形2第4章4二维几何变换2第5章5直线段裁剪2第5章6立方体线框模型正交投影2第6章7立方体线框模型透视投影2第6章8动态三视图2第6章9动态绘制Bezier曲线2第7章10交互式三次B样条曲线2第7章11旋转的Koch雪花2第8章12颜色渐变立方体2第9章13地理划分线框球2第9章14交叉条消隐2第9章15立方体光照模型2第10章16球体Gouraud光照模型2第10章17球体Phong光照模型2第10章18立方体纹理映射2第10章表2课程设计项目序号课程设计名称设 计 时 数1基本图元光栅扫描演示系统一周2递归动态球体演示系统一周3圆环动态纹理演示系统一周4动态光源演示系统一周53DS接口演示系统一周本书的特色如下。

1. 实验全部使用Visual C++的MFC框架开发

计算机图形学讲授的是图形生成原理和算法,本书使用Visual C++的MFC框架开发了综合性教学实验及课程设计项目,从原理级描述了真实感图形的生成过程和实现方法,并在个人网站上提供了完整源代码供读者免费下载。目前市面上流行的计算机图形学教学实验及课程设计教材大多基于某种图形库(如OpenGL或Direct 3D等),图形原理以函数形式封装,只要正确调用相关函数就可以完成图形绘制。基于某种图形库的实验强调了图形库函数的应用,弱化了对图形生成原理的理解。本书开发了原理级类模块,搭建了三维光照场景,实现了从原理到应用的自然进阶。本书教学实验和课程设计项目的全部经过了严格的调试,能够直接在Visual C++ 6.0的MFC环境中运行。

2. 综合性实验提供了拓展实验项目

计算机图形学每个实验项目都是综合使用《计算机图形学基础教程(Visual C++版)》提供的相关原理而完成,同时提供了实验的拓展项目。例如,实验2给出了任意斜率的直线生成方法,在拓展项目部分提供了任意斜率的反走样直线生成方法、任意斜率的颜色渐变直线生成方法以及任意斜率的颜色渐变反走样直线生成方法。每个教学实验及其拓展项目的训练可以满足实际工程项目对直线使用的要求。

3. 采用类模块集成方式构造三维光照场景

(1) 基础类: 提供了CP2类绘制二维点;提供了CP3类绘制三维点;提供了CRGB类处理RGB颜色;提供了CVector类处理矢量。

(2) 直线类: 提供了CLine类绘制任意斜率的直线;提供了CALine类绘制任意斜率的反走样直线;提供了CCLine类绘制任意斜率的颜色渐变直线;提供了CACLine类绘制任意斜率的反走样颜色渐变直线。

(3) 变换类: 提供了CTransForm类实现二维和三维图形变换。

(4) 填充类: 提供了CFill类使用有效边表算法填充多边形;提供了CZBuffer类实现深度缓冲消隐,并使用Gouraud和Phong明暗处理填充三角形或四边形面片。

(5) 光照类: 提供了CLight类设置光源;提供了CMaterial类设置物体材质;提供了CLighting类对物体施加光照。

对于任何三维物体只要建立点表和面表数据文件,就可以在三维光照场景中绘制真实感图形。

4. 消除了内存泄漏

图形绘制过程中常会动态分配内存,如果在程序结束时没有释放这部分内存,则极易造成内存泄漏。本书重点处理了使用new运算符所引起的内存泄漏问题。

5. 图形开发模式符合OpenGL规范

本书的实验开发按照OpenGL的操作流程实现。物体和光源位于用户坐标系,视点位于观察坐标系。物体使用三维正交变换类旋转,物体在屏幕坐标系的投影使用透视变换实现。视点位置固定,物体旋转,生成动态图形。物体的面消隐使用ZBuffer类实现,因为使用到物体的深度值,所以将物体在屏幕坐标系的透视投影的二维坐标拓展为三维坐标,即包含了物体的深度坐标。

读者可以根据本校实验时数,选择不同的上机实验项目。在条件允许的情况下,建议读者完成全部实验项目,在实验中体会计算机图形学基本原理的具体实现方法。上机环境选用Visual C++ 6.0或更高版本,建议显示分辨率为1024×768。

本书虽然是笔者编写的《计算机图形学基础教程(Visual C++版)》的配套教材,但在“实验步骤”中详细给出了每个实验使用到的基本原理,因此也可以独立成书。本书是《计算机图形学基础教程(Visual C++版)》的实践性补充,有助于读者从实践角度掌握计算机图形学的基本原理。通过本书的学习,读者可以学会柏拉图正多面体、球体、圆环等三维物体的建模方法,可以改变物体的材质,为物体添加函数纹理或图片纹理,调整光源的数量、位置和颜色对物体施加光照,使用动画按钮或键盘方向键交互旋转真实感图形。

本书的教学实验部分由康凤娥编写,课程设计部分由孔令德编写,全书由孔令德提出编写计划并进行统稿。博创研究所的潘晓、宋准、左亮亮和刘玉辰等参与了实验项目的开发。

我们一直秉承“精心、精业、精品”的编写理念,虽然综合性教学实验及课程设计项目的案例多年前已经开发完成,并经过了08~10届学生试用,但出版前的最后修改仍耗费了大量的时间,因为相当于开发了一套独立的“OpenGL”图形库,诚恳欢迎计算机图形学方面的专家学者提出宝贵建议。笔者努力打造“精品课程平台+计算机图形学系列教材+数字化资源”的计算机图形学教学体系,希望笔者所做的工作对计算机图形学的实验教学数字化资源建设方面有所帮助,以进一步扩大省级计算机图形学精品课程的受益面。

我们的个人网站: http//:www.klingde.com/。

登录网站可以免费下载本书的所有教学实验和课程设计项目的源程序代码以及实验拓展项目的可执行文件。网站上同时提供了《计算机图形学基础教程(Visual C++版)》的教案及课件、《计算机图形学实践教程(Visual C++版)》的43个案例源程序、《计算机图形学基础教程(Visual C++版)习题解答与编程实践》的所有习题解答源程序以及习题拓展的可执行文件。网站“精品展示”项目提供了博创研究所开发的计算机图形学成功案例可执行文件,“示例源码”栏目提供了笔者定期公开的计算机图形学成功案例源程序。

我们主持的省级计算机图形学精品网站: http://210.31.100.100/jsjtxx/welcome.html。

我们的Email: klingde@163.com。

我们的QQ: 997796978。

孔令德2011年12月