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.
编 者2011年5月