本书全面介绍计算机图形学的系统组成、图形生成与显示算法以及交互实现技术。主要内容包括: 计算机图形系统、基本光栅图形生成技术、图形变换、交互绘图技术、真实感图形的生成技术、曲线与曲面、几何建模以及与计算机图形学相关的研究领域。本书的特点是取材精炼,注重算法与实现相结合,便于读者用较少的时间精力全面地掌握计算机图形学的主要内容。本书将计算机图形学的基本理论、算法与OpenGL技术有机结合,可以加深读者对基本理论、算法的理解,并且有利于读者牢固地掌握OpenGL技术。本书强调图形交互技术,介绍了基于Windows操作系统的Visual C++图形程序开发平台和OpenGL技术的实现,增加了学习的趣味性,有助于读者进行图形学实验,为读者今后在学习和工作中应用图形学技术开发应用系统打下坚实的基础。
本书适合作为高等学校计算机图形学的教学用书,对从事CAD和CG研究、应用和开发的广大科技人员也有较高的参考价值。版权所有,翻印必究。
前言
FOREWORD图形是一种重要的信息表达和传递方式。与语言、文字、数字相比,用图形表达信息更直观、更丰富。诞生于20世纪60年代的计算机图形学是研究如何使用计算机生成图形的一门学科。随着计算机软硬件的不断发展,尤其在20世纪80年代以后,计算机图形学快速发展,计算机能够表达的图形越来越丰富,从二维图形到三维实体,从静态图片到实时动画,从线框图到真实感显示,从产品设计、工程分析到动画、广告、影视艺术,计算机图形学在众多领域得到应用,而且在应用过程中与其他学科相结合,产生了很多新兴的学科,如CAD/CAM/CAE、可视化、动画、仿真、虚拟现实等,计算机图形学在现代社会生活中发挥着越来越重要的作用。
本书作者自1994年开始从事计算机图形学的教学和科研工作,从计算机图形学发展和应用研究两个方面系统地总结了10多年的教学和科研体验,写成此书。
本书共分9章。第1章为绪论,介绍计算机图形学的发展历史、研究内容和应用领域;第2章是计算机图形系统,概述计算机图形系统的软硬件发展,介绍Windows操作系统下的图形程序开发方法和OpenGL绘图程序;第3章是基本光栅图形生成技术,概述基本光栅图形生成方法,重点介绍目前应用较多的经典方法,并且给出Visual C++和OpenGL生成基本图形的实现;第4章是图形变换,在叙述几何变换和坐标变换的概念和作用的基础上,详细介绍交互绘图过程中的显示变换、OpenGL坐标变换机制、线段裁剪和多边形裁剪;第5章是交互绘图技术,介绍Windows、MFC、OpenGL对交互绘图的支持与实现;第6章是真实感图形的生成技术,概述真实感图形生成方法的发展,介绍消隐、光照、纹理映射、阴影生成、反走样技术,用OpenGL生成真实感图形;第7章是曲线与曲面,分析曲线、曲面生成方法的发展,重点介绍当前实用图形系统中常用的曲线曲面生成方法,用OpenGL生成NURBS曲线和曲面;第8章是几何建模,介绍当前实用造型系统中常用的三维建模方法;第9章是计算机图形学相关的研究领域,介绍CAD/CAM、计算机动画、可视化、虚拟现实、逆向工程等新兴学科的发展。
本书具有如下特点:
(1) 精选内容、突出主线
计算机图形学在40年的发展过程中不断地推陈出新,为适应教学需求,增添成熟的新内容,并介绍最新的发展方向,使学生能够用有限的时间和精力系统准确地了解计算机图形系统、基本原理、应用和发展方向。
(2) 强调交互技术
交互绘图是图形应用系统的重要环节,是计算机图形学的重要内容。本书加强这一部分内容不仅有助于学生进行计算机图形学实验,而且为开发专业图形应用系统提供基础。
(3) 强调OpenGL,注重实验
图形学的理论和算法比较艰深和难懂,但实验结果却可以非常直观和生动。本书介绍了Windows操作系统下图形程序开发环境和OpenGL,提供一套在教学中多次使用的实验图形平台,让学生在这个平台上完成计算机图形学的实验。同时通过OpenGL生成和显示图形,进一步加深学生对计算机图形学的概念、原理和算法的理解,起到事半功倍的效果。OpenGL是独立于硬件设备、窗口系统和操作系统的图形标准,以OpenGL为基础开发的应用程序可以在各种平台间移植。学会使用OpenGL可以为今后开发图形应用系统打下基础。
本书由杨钦制定详细的编写大纲和写作要求。第1章由徐永安与翟红英共同撰写;第2章由翟红英撰写;第3章由朱大培撰写;第4、8章由陶海燕撰写;第5章由宫法明撰写;第6章由李吉刚撰写;第7章由徐永安撰写;第9章由徐永安、蔡强撰写。全书由杨钦、徐永安和翟红英统稿,杨钦最后修改定稿。
本书在编写过程中得到了北京航空航天大学马殿富教授、陈其明教授、葛本修教授的指导和大力支持。北京航空航天大学计算机学院计算机图形学研究室的博士研究生程丹和硕士研究生金宇林等在本书的统稿和审校过程中也做了许多工作。在此表示衷心的感谢!
由于作者水平有限,书中难免有错误及不当之处,恳请读者批评指正。作者
2005年1月
目录CONTENT
S第1章绪论11.1计算机图形学的发展历史1
1.1.1起源1
1.1.2计算机图形学硬件设备的发展2
1.1.3计算机图形学算法研究的发展3
1.2计算机图形学的研究内容5
1.3计算机图形学的应用领域5
习题7
第2章计算机图形系统8
2.1计算机图形系统概述8
2.1.1计算机图形外部设备8
2.1.2计算机图形软件10
2.1.3图形标准14
2.2Windows操作系统下图形程序开发方法介绍16
2.2.1Windows应用程序执行模式16
2.2.2基本的Windows应用程序17
2.2.3Windows图形环境介绍18
2.2.4Windows图形程序开发方法20
2.3OpenGL介绍21
2.3.1OpenGL的背景情况21
2.3.2OpenGL的主要功能21
2.3.3OpenGL的绘制流程和原理22
2.3.4使用Visual C++开发OpenGL绘图程序的基本方法23
2.3.5OpenGL的缓冲区26
习题28
第3章基本光栅图形生成技术29
3.1光栅图形学概述29
3.2线的生成算法29
3.2.1直线的生成算法29
3.2.2圆弧的生成算法34
目录〖〗〖〗〖〗计算机图形学〖〗3.3区域的填充39
3.3.1扫描线算法39
3.3.2种子填充算法43
3.3.3区域图案填充算法47
3.4文字的生成47
3.4.1点阵字符48
3.4.2矢量字符48
3.5用Visual C++生成基本图形49
3.5.1图形设备接口49
3.5.2Visual C++绘图方法50
3.6用OpenGL生成基本图形61
3.6.1用OpenGL生成点62
3.6.2用OpenGL生成直线62
3.6.3用OpenGL生成区域图形64
3.6.4用OpenGL生成字符70
3.6.5OpenGL的颜色缓冲区73
习题75
第4章图形变换76
4.1几何变换76
4.1.1几何变换的概念和作用76
4.1.2基本几何变换76
4.1.3组合几何变换与齐次坐标79
4.2坐标变换84
4.2.1坐标变换的概念与作用84
4.2.2基本坐标变换方法84
4.2.3齐次坐标下的坐标变换方法85
4.3几何变换与坐标变换的关系86
4.4显示变换88
4.4.1如何将图形显示到窗口中88
4.4.2窗口到视区的变换88
4.4.3透视投影变换89
4.4.4平行投影变换91
4.4.5视坐标系与视变换92
4.4.6窗口到三维空间的变换93
4.5裁剪95
4.5.1裁剪的概念与作用95
4.5.2线段的裁剪98
4.5.3多边形裁剪102
4.6OpenGL坐标变换机制105
4.6.1OpenGL中与变换有关的数据结构105
4.6.2OpenGL中的ModelView变换机制106
4.6.3OpenGL中的Model变换使用方法107
4.6.4OpenGL中的View变换使用方法107
4.6.5OpenGL的投影108
4.6.6OpenGL的深度缓冲区109
4.6.7OpenGL中的反变换110
习题111
第5章交互绘图技术112
5.1窗口系统、事件驱动模式112
5.1.1窗口112
5.1.2事件驱动模式112
5.1.3Windows下基于消息的事件驱动编程113
5.1.4MFC中的事件驱动编程114
5.1.5状态与事件结合程序控制模式115
5.2交互式的显示控制技术120
5.2.1场景充满窗口(FitWindow)的控制方法120
5.2.2旋转操作的交互控制方法121
5.2.3平移操作的交互控制方法123
5.2.4缩放操作的交互控制方法124
5.3交互式的图形生成技术125
5.3.1交互式绘图概述125
5.3.2坐标的输入技术126
5.3.3橡皮筋技术126
5.4交互式的图形编辑技术127
5.4.1交互式图形编辑的基本方法128
5.4.2图形元素拾取技术128
5.5OpenGL对图形交互的支持131
5.5.1用OpenGL的反向坐标变换实现三维坐标输入131
5.5.2用OpenGL缓冲区技术实现橡皮筋功能133
5.5.3OpenGL中的选择机制介绍137
习题139
第6章真实感图形的生成技术141
6.1消隐技术142
6.1.1消隐技术的综合介绍142
6.1.2多面体隐藏线消除143
6.1.3Z缓冲器消隐算法147
6.2光照技术148
6.2.1简单光照模型148
6.2.2光线跟踪与辐射度方法介绍153
6.3物体表面细节的模拟157
6.3.1颜色纹理映射技术157
6.3.2几何纹理映射技术161
6.3.3环境映射技术163
6.4阴影的生成163
6.4.1影域多边形方法164
6.4.2Z缓冲方法165
6.5图形反走样技术166
6.6用OpenGL生成真实感图形167
6.6.1OpenGL的光照环境设置方法170
6.6.2OpenGL的物体材料特性的设置172
6.6.3OpenGL的纹理映射方法173
习题177
第7章曲线与曲面178
7.1曲线曲面入门179
7.1.1曲线、曲面的表示形式179
7.1.2曲线曲面的光滑连接181
7.2三次样条曲线曲面182
7.2.1三次样条函数182
7.2.2三次样条曲线187
7.2.3三次样条曲面188
7.3Bézier曲线和曲面188
7.3.1Bézier曲线188
7.3.2Bézier曲面190
7.4B样条曲线和曲面193
7.4.1均匀B样条曲线193
7.4.2均匀B样条曲面195
7.5非均匀有理B样条曲线曲面197
7.5.1非均匀B样条曲线曲面197
7.5.2有理B样条曲线202
7.5.3非均匀有理B样条曲线曲面203
7.6用OpenGL生成曲线和曲面204
7.6.1用OpenGL生成NURBS曲线204
7.6.2用OpenGL生成NURBS曲面205
7.6.3用OpenGL生成裁剪NURBS曲面208
习题210
第8章几何建模211
8.1概述211
8.2体素构造表示法212
8.2.1基本体素212
8.2.2正则集合运算212
8.2.3物体的CSG树表示214
8.3边界表示法214
8.3.1物体的边界表示法214
8.3.2非流形结构的边界表示法216
8.4其他表示方法218
8.4.1扫描法218
8.4.2立方体网格模型218
8.4.3八叉树模型219
8.4.4四面体网格模型220
8.5几何建模方法的应用与发展221
习题221
第9章计算机图形学相关的研究领域222
9.1计算机辅助设计与制造222
9.1.1概述222
9.1.2CAD/CAM系统的组成与功能223
9.1.3CAD/CAM技术的研究热点223
9.1.4应用实例225
9.2计算机动画226
9.2.1概述226
9.2.2分类228
9.2.3双缓存实现帧动画230
9.3可视化230
9.3.1可视化发展历程230
9.3.2可视化的研究内容232
9.3.3可视化方法233
9.3.4可视化应用234
9.4虚拟现实237
9.4.1概论237
9.4.2虚拟现实技术的原理与特征238
9.4.3虚拟现实系统的组成238
9.4.4仿真、多媒体与虚拟现实之间的关系241
9.4.5虚拟现实技术应用243
9.5逆向工程244
9.5.1概述244
9.5.2逆向工程的核心245
9.5.3逆向工程的应用247
习题250
参考文献251