图书简介:
目 录
第1章 计算机图形学综述
1.1 图和表
1.2 计算机辅助设计
1.3 虚拟现实环境
1.4 数据可视化
1.5 教学与培训
1.6 计算机艺术
1.7 娱乐
1.8 图像处理
1.9 图形用户界面
1.10 小结
参考文献
第2章 计算机图形硬件
2.1 视频显示设备
2.1.1 刷新式CRT
2.1.2 光栅扫描显示器
2.1.3 随机扫描显示器
2.1.4 彩色CRT监视器
2.1.5 平板显示器
2.1.6 三维观察设备
2.1.7 立体感和虚拟现实系统
2.2 光栅扫描系统
2.2.1 视频控制器
2.2.2 光栅扫描显示处理器
2.3 图形工作站和观察系统
2.4 输入设备
2.4.1 键盘、 按键盒和旋钮
2.4.2 鼠标设备
2.4.3 跟踪球和空间球
2.4.4 操纵杆
2.4.5 数据手套
2.4.6 数字化仪
2.4.7 图像扫描仪
2.4.8 触摸板
2.4.9 光笔
2.4.10 语音系统
2.5 硬拷贝设备
2.6 图形网络
2.7 因特网上的图形
2.8 小结
参考文献
练习题
附加综合题
第3章 计算机图形软件
3.1 坐标表示
3.2 图形功能
3.3 软件标准
3.4 其他图形软件包
3.5 OpenGL简介
3.5.1 基本的OpenGL语法
3.5.2 相关库
3.5.3 头文件
3.5.4 使用GLUT进行显示窗口管理
3.5.5 一个完整的OpenGL程序
3.5.6 OpenGL的出错处理
3.6 小结
参考文献
练习题
附加综合题
第4章 输出图元
4.1 坐标系统
4.1.1 屏幕坐标
4.1.2 绝对和相对坐标描述
4.2 OpenGL中指定二维世界坐标系统
4.3 OpenGL画点函数
4.4 OpenGL画线函数
4.5 OpenGL曲线函数
4.6 填充区图元
4.7 多边形填充区
4.7.1 多边形分类
4.7.2 识别凹多边形
4.7.3 分割凹多边形
4.7.4 将凸多边形分割成三角形集
4.7.5 内-外测试
4.7.6 多边形表
4.7.7 平面方程
4.7.8 前向面与后向面
4.8 OpenGL多边形填充区函数
4.9 OpenGL顶点数组
4.10 像素阵列图元
4.11 OpenGL像素阵列函数
4.11.1 OpenGL位图函数
4.11.2 OpenGL像素图函数
4.11.3 OpenGL光栅操作
4.12 字符图元
4.13 OpenGL字符函数
4.14 图形分割
4.15 OpenGL显示表
4.15.1 创建和命名OpenGL显示表
4.15.2 执行OpenGL显示表
4.15.3 删除OpenGL显示表
4.16 OpenGL显示窗口重定形函数
4.17 小结
示例程序
参考文献
练习题
附加综合题
第5章 图元的属性
5.1 OpenGL状态变量
5.2 颜色和灰度
5.2.1 RGB颜色分量
5.2.2 颜色表
5.2.3 灰度
5.2.4 其他颜色参数
5.3 OpenGL颜色函数
5.3.1 OpenGL的RGB和RGBA颜色模型
5.3.2 OpenGL 颜色索引模式
5.3.3 OpenGL颜色调和
5.3.4 OpenGL颜色数组
5.3.5 其他OpenGL颜色函数
5.4 点的属性
5.5 OpenGL点属性函数
5.6 线的属性
5.6.1 线宽
5.6.2 线型
5.6.3 画笔或画刷的选择
5.7 OpenGL线属性函数
5.7.1 OpenGL线宽函数
5.7.2 OpenGL线型函数
5.7.3 其他OpenGL线效果
5.8 曲线属性
5.9 填充区属性
5.9.1 填充模式
5.9.2 颜色调和填充区域
5.10 OpenGL填充区属性函数
5.10.1 OpenGL填充图案函数
5.10.2 OpenGL纹理和插值图案
5.10.3 OpenGL线框图方法
5.10.4 OpenGL前向面函数
5.11 字符属性
5.12 OpenGL字符属性函数
5.13 OpenGL反走样函数
5.14 OpenGL询问函数
5.15 OpenGL属性组
5.16 小结
参考文献
练习题
附加综合题
第6章 实现图元及属性的算法
6.1 画线算法
6.1.1 直线方程
6.1.2 DDA算法
6.1.3 Bresenham画线算法
6.1.4 显示折线
6.2 并行画线算法
6.3 帧缓存值的装载
6.4 圆生成算法
6.4.1 圆的特性
6.4.2 中点圆算法
6.5 椭圆生成算法
6.5.1 椭圆的特征
6.5.2 中点椭圆算法
6.6 其他曲线
6.6.1 圆锥剖切线
6.6.2 多项式和样条曲线
6.7 并行曲线算法
6.8 像素编址和对象的几何要素
6.8.1 屏幕网格坐标
6.8.2 保持显示对象的几何特性
6.9 直线段和曲线属性的实现
6.9.1 线宽
6.9.2 线型
6.9.3 画笔或画刷的选项
6.9.4 曲线属性
6.10 通用扫描线填充算法
6.11 凸多边形的扫描线填充
6.12 曲线边界区域的扫描线填充
6.13 不规则边界区域的填充方法
6.13.1 边界填充算法
6.13.2 泛滥填充算法
6.14 填充模式的实现方法
6.14.1 填充模式
6.14.2 颜色调和填充区域
6.15 反走样的实现方法
6.15.1 直线段的过取样
6.15.2 子像素的加权掩模
6.15.3 直线段的区域取样
6.15.4 过滤技术
6.15.5 像素移相
6.15.6 直线亮度差的校正
6.15.7 区域边界的反走样
6.16 小结
参考文献
练习题
附加综合题
第7章 二维几何变换
7.1 基本的二维几何变换
7.1.1 二维平移
7.1.2 二维旋转
7.1.3 二维缩放
7.2 矩阵表示和齐次坐标
7.2.1 齐次坐标
7.2.2 二维平移矩阵
7.2.3 二维旋转矩阵
7.2.4 二维缩放矩阵
7.3 逆变换
7.4 二维复合变换
7.4.1 复合二维平移
7.4.2 复合二维旋转
7.4.3 复合二维缩放
7.4.4 通用二维基准点旋转
7.4.5 通用二维基准点缩放
7.4.6 通用二维定向缩放
7.4.7 矩阵合并特性
7.4.8 通用二维复合变换和计算效率
7.4.9 二维刚体变换
7.4.10 构造二维旋转矩阵
7.4.11 二维复合矩阵编程例
7.5 其他二维变换
7.5.1 反射
7.5.2 错切
7.6 几何变换的光栅方法
7.7 OpenGL光栅变换
7.8 二维坐标系间的变换
7.9 OpenGL二维几何变换函数
7.9.1 基本的OpenGL几何变换
7.9.2 OpenGL矩阵操作
7.10 OpenGL几何变换编程示例
7.11 小结
参考文献
练习题
附加综合题
第8章 二维观察
8.1 二维观察流水线
8.2 裁剪窗口
8.2.1 观察坐标系裁剪窗口
8.2.2 世界坐标系裁剪窗口
8.3 规范化和视口变换
8.3.1 裁剪窗口到规范化视口的映射
8.3.2 裁剪窗口到规范化正方形的映射
8.3.3 字符串的显示
8.3.4 分画面效果和多输出设备
8.4 OpenGL二维观察函数
8.4.1 OpenGL投影模式
8.4.2 GLU裁剪窗口函数
8.4.3 OpenGL视口函数
8.4.4 建立GLUT显示窗口
8.4.5 设定GLUT显示窗口的模式和颜色
8.4.6 GLUT显示窗口标识
8.4.7 删除GLUT显示窗口
8.4.8 当前GLUT显示窗口
8.4.9 修改GLUT显示窗口的位置和大小
8.4.10 管理多个GLUT显示窗口
8.4.11 GLUT子窗口
8.4.12 显示窗口屏幕光标形状的选择
8.4.13 在GLUT显示窗口中观察图形对象
8.4.14 执行应用程序
8.4.15 其他GLUT函数
8.4.16 OpenGL的二维观察程序例
8.5 裁剪算法
8.6 二维点裁剪
8.7 二维线裁剪
8.7.1 CohenSutherland线段裁剪算法
8.7.2 梁友栋Barsky线段裁剪算法
8.7.3 NichollLeeNicholl线段裁剪算法
8.7.4 非矩形多边形裁剪窗口的线段裁剪
8.7.5 非线性裁剪窗口边界的线裁剪
8.8 多边形填充区裁剪
8.8.1 SutherlandHodgman多边形裁剪
8.8.2 WeilerAtherton多边形裁剪
8.8.3 非矩形的多边形窗口的多边形裁剪
8.8.4 非线性裁剪窗口边界的多边形裁剪
8.9 曲线的裁剪
8.10 文字的裁剪
8.11 小结
参考文献
练习题
附加综合题
第9章 三维几何变换
9.1 三维平移
9.2 三维旋转
9.2.1 三维坐标轴旋转
9.2.2 一般三维旋转
9.2.3 三维旋转的四元数方法
9.3 三维缩放
9.4 三维复合变换
9.5 其他三维变换
9.5.1 三维反射
9.5.2 三维错切
9.6 三维坐标系间的变换
9.7 仿射变换
9.8 OpenGL几何变换函数
9.8.1 OpenGL矩阵栈
9.9 OpenGL几何变换编程例
9.10 小结
参考文献
练习题
附加综合题
第10章 三维观察
10.1 三维观察概念综述
10.1.1 三维场景观察
10.1.2 投影
10.1.3 深度提示
10.1.4 可见线和可见面的判定
10.1.5 面绘制
10.1.6 拆散和剖切面视图
10.1.7 三维和立体视图
10.2 三维观察流水线
10.3 三维观察坐标系参数
10.3.1 观察平面法向量
10.3.2 观察向上向量
10.3.3 uvn观察坐标系
10.3.4 生成三维观察效果
10.4 世界坐标系到观察坐标系的变换
10.5 投影变换
10.6 正投影
10.6.1 轴测和等轴测正投影
10.6.2 正投影坐标系
10.6.3 裁剪窗口和正投影观察体
10.6.4 正投影的规范化变换
10.7 斜投影
10.7.1 绘图和设计中的斜平行投影
10.7.2 斜等测和斜二测斜平行投影
10.7.3 斜平行投影向量
10.7.4 裁剪窗口和斜平行投影观察体
10.7.5 斜平行投影变换矩阵
10.7.6 斜平行投影的规范化变换
10.8 透视投影
10.8.1 透视投影变换坐标系
10.8.2 透视投影公式: 特殊情况
10.8.3 透视投影的灭点
10.8.4 透视投影观察体
10.8.5 透视投影变换矩阵
10.8.6 对称的透视投影锥体
10.8.7 斜透视投影棱台
10.8.8 规范化透视投影变换坐标
10.9 视口变换和三维屏幕坐标系
10.10 OpenGL三维观察函数
10.10.1 OpenGL观察变换函数
10.10.2 OpenGL正交投影函数
10.10.3 OpenGL对称透视投影棱台
10.10.4 OpenGL通用透视投影函数
10.10.5 OpenGL视口和显示窗口
10.10.6 OpenGL三维观察程序示例
10.11 三维裁剪算法
10.11.1 三维齐次坐标系中的裁剪
10.11.2 三维区域码
10.11.3 三维点和线的裁剪
10.11.4 三维多边形裁剪
10.11.5 三维曲面裁剪
10.11.6 任意裁剪平面
10.12 OpenGL任选裁剪平面
10.13 小结
参考文献
练习题
附加综合题
第11章 层次建模
11.1 基本建模概念
11.1.1 系统表示
11.1.2 符号层次
11.2 建模软件包
11.3 通用层次建模方法
11.3.1 局部坐标
11.3.2 建模变换
11.3.3 创建层次结构
11.4 使用OpenGL显示列表的层次建模
11.5 小结
参考文献
练习题
附加综合题
第12章 计算机动画
12.1 计算机动画的光栅方法
12.1.1 双缓存
12.1.2 用光栅操作生成动画
12.2 动画序列的设计
12.3 传统动画技术
12.4 通用计算机动画功能
12.5 计算机动画语言
12.6 关键帧系统
12.6.1 变形
12.6.2 模拟加速度
12.7 运动的描述
12.7.1 直接运动描述
12.7.2 目标导向系统
12.7.3 运动学和动力学
12.8 角色动画
12.8.1 关节链形体动画
12.8.2 运动捕捉
12.9 周期性运动
12.10 OpenGL动画子程序
12.11 小结
参考文献
练习题
附加综合题
第13章 三维对象的表示
13.1 多面体
13.2 OpenGL多面体函数
13.2.1 OpenGL多边形填充函数
13.2.2 GLUT规则多面体函数
13.2.3 GLUT多面体程序示例
13.3 曲面
13.4 二次曲面
13.4.1 球面
13.4.2 椭球面
13.4.3 环面
13.5 超二次曲面
13.5.1 超椭圆
13.5.2 超椭球面
13.6 OpenGL二次曲面和三次曲面函数
13.6.1 GLUT二次曲面函数
13.6.2 OpenGL三次曲面茶壶函数
13.6.3 GLU二次曲面函数
13.6.4 使用GLUT和GLU二次曲面函数的程序示例
13.7 小结
参考文献
练习题
附加综合题
第14章 样条表示
14.1 插值和逼近样条
14.2 参数连续性条件
14.3 几何连续性条件
14.4 样条描述
14.5 样条曲面
14.6 修剪样条曲面
14.7 三次样条插值方法
14.7.1 自然三次样条
14.7.2 Hermite插值
14.7.3 Cardinal样条
14.7.4 KochanekBartels样条
14.8 Bézier样条曲线
14.8.1 Bézier曲线公式
14.8.2 Bézier曲线生成程序示例
14.8.3 Bézier曲线的特性
14.8.4 使用Bézier曲线的设计技术
14.8.5 三次Bézier曲线
14.9 Bézier曲面
14.10 B样条曲线
14.10.1 B样条曲线公式
14.10.2 均匀周期性B样条曲线
14.10.3 三次周期性B样条曲线
14.10.4 开放均匀的B样条曲线
14.10.5 非均匀B样条曲线
14.11 B样条曲面
14.12 Beta样条
14.12.1 Beta样条连续性条件
14.12.2 三次周期性Beta样条曲线的矩阵表示
14.13 有理样条
14.14 样条表示之间的转换
14.15 样条曲线和曲面的显示
14.15.1 Horner规则
14.15.2 向前差分计算
14.15.3 细分方法
14.16 OpenGL的逼近样条函数
14.16.1 OpenGL的Bézier样条曲线函数
14.16.2 OpenGL的Bézier样条曲面函数
14.16.3 GLU的B样条曲线函数
14.16.4 GLU的B样条曲面函数
14.16.5 GLU曲面修剪函数
14.17 小结
参考文献
练习题
附加综合题
第15章 其他三维对象的表示
15.1 柔性对象
15.2 扫描表示法
15.3 结构实体几何法
15.4 八叉树
15.5 BSP树
15.6 基于物理的方法
15.7 小结
参考文献
练习题
附加综合题
第16章 可见面判别算法
16.1 可见面判别算法的分类
16.2 后向面判别
16.3 深度缓存算法
16.4 A缓存算法
16.5 扫描线算法
16.6 深度排序算法
16.7 BSP树算法
16.8 区域细分算法
16.9 八叉树算法
16.10 光线投射算法
16.11 可见性检测算法的比较
16.12 曲面
16.12.1 曲面表示
16.12.2 曲面的层位线显示
16.13 线框图可见性算法
16.13.1 线框面可见性算法
16.13.2 线框图深度提示算法
16.14 OpenGL可见性检查函数
16.14.1 OpenGL多边形剔除函数
16.14.2 OpenGL深度缓存函数
16.14.3 OpenGL线框面可见性方法
16.14.4 OpenGL深度提示函数
16.15 小结
参考文献
练习题
附加综合题
第17章 光照模型与面绘制算法
17.1 光源
17.1.1 点光源
17.1.2 无穷远光源
17.1.3 辐射强度衰减
17.1.4 方向光源和投射效果
17.1.5 角强度衰减
17.1.6 扩展光源和Warn模型
17.2 表面光照效果
17.3 基本光照模型
17.3.1 环境光
17.3.2 漫反射
17.3.3 镜面反射和Phong模型
17.3.4 漫反射和镜面反射的合并
17.3.5 多光源的漫反射和镜面反射
17.3.6 表面的光发射
17.3.7 考虑强度衰减和高光的基本光照模型
17.3.8 RGB颜色考虑
17.3.9 其他颜色表示
17.3.10 亮度
17.4 透明表面
17.4.1 半透明材料
17.4.2 光折射
17.4.3 基本的透明模型
17.5 雾气效果
17.6 阴影
17.7 照相机参数
17.8 光强度显示
17.8.1 分配系统强度等级
17.8.2 gamma校正与视频查找表
17.8.3 显示连续色调的图像
17.9 半色调模式和抖动技术
17.9.1 半色调近似
17.9.2 抖动技术
17.10 多边形绘制算法
17.10.1 恒定强度的明暗处理
17.10.2 Gouraud明暗处理
17.10.3 Phong明暗处理
17.10.4 快速Phong明暗处理
17.11 OpenGL光照和表面绘制函数
17.11.1 OpenGL点光源函数
17.11.2 指定一个OpenGL光源位置和类型
17.11.3 指定OpenGL光源颜色
17.11.4 指定OpenGL光源的辐射强度衰减系数
17.11.5 OpenGL方向光源(投射光源)
17.11.6 OpenGL全局光照参数
17.11.7 OpenGL表面特性函数
17.11.8 OpenGL光照模型
17.11.9 OpenGL雾气效果
17.11.10 OpenGL透明性函数
17.11.11 OpenGL表面绘制函数
17.11.12 OpenGL半色调操作
17.12 小结
参考文献
练习题
附加综合题
第18章 纹理与表面细节添加方法
18.1 用多边形模拟表面细节
18.2 纹理映射
18.2.1 线性纹理图案
18.2.2 表面纹理图案
18.2.3 体纹理图案
18.2.4 纹理缩减图案
18.2.5 过程式纹理映射方法
18.3 凹凸映射
18.4 帧映射
18.5 OpenGL纹理函数
18.5.1 OpenGL线纹理函数
18.5.2 OpenGL表面纹理函数
18.5.3 OpenGL体纹理函数
18.5.4 OpenGL纹理图案的颜色选项
18.5.5 OpenGL纹理映射选项
18.5.6 OpenGL纹理环绕
18.5.7 复制帧缓存中的OpenGL纹理图案
18.5.8 OpenGL纹理坐标数组
18.5.9 OpenGL纹理图案命名
18.5.10 OpenGL纹理子图案
18.5.11 OpenGL纹理缩减图案
18.5.12 OpenGL纹理边界
18.5.13 OpenGL代理纹理
18.5.14 二次曲面的自动纹理映射
18.5.15 齐次纹理坐标
18.5.16 其他的OpenGL纹理选项
18.6 小结
参考文献
练习题
附加综合题
第19章 颜色模型和颜色应用
19.1 光的特性
19.1.1 电磁频谱
19.1.2 颜色的心理学特征
19.2 颜色模型
19.2.1 基色
19.2.2 直观的颜色概念
19.3 标准基色和色度图
19.3.1 XYZ颜色模型
19.3.2 规范化的XYZ值
19.3.3 CIE色度图
19.3.4 颜色范围
19.3.5 互补色
19.3.6 主波长
19.3.7 纯度
19.4 RGB颜色模型
19.5 YIQ颜色模型
19.5.1 YIQ参数
19.5.2 RGB颜色空间和YIQ颜色空间之间的转换
19.5.3 YUV和YCrCb系统
19.6 CMY和CMYK颜色模型
19.6.1 CMY参数
19.6.2 CMY颜色空间和RGB颜色空间之间的转换
19.7 HSV颜色模型
19.7.1 HSV参数
19.7.2 选择明暗、 色泽和色调
19.7.3 HSV和RGB模型之间的转换
19.8 HLS颜色模型
19.9 颜色选择及其应用
19.10 小结
参考文献
练习题
附加综合题
第20章 图形用户界面和交互输入方法
20.1 图形数据的输入
20.2 输入设备的逻辑分类
20.2.1 定位设备
20.2.2 笔划设备
20.2.3 字符串设备
20.2.4 定值设备
20.2.5 选择设备
20.2.6 拾取设备
20.3 图形数据的输入功能
20.3.1 输入模式
20.3.2 回显反馈
20.3.3 回调函数
20.4 交互式构图技术
20.4.1 基本的定位方法
20.4.2 拖曳
20.4.3 约束
20.4.4 网格
20.4.5 橡皮条方法
20.4.6 引力场
20.4.7 交互式绘画方法
20.5 虚拟现实环境
20.6 OpenGL支持交互式输入设备的函数
20.6.1 GLUT鼠标函数
20.6.2 GLUT键盘函数
20.6.3 GLUT数据板函数
20.6.4 GLUT空间球函数
20.6.5 GLUT按钮盒函数
20.6.6 GLUT拨号盘函数
20.6.7 OpenGL拾取操作
20.7 OpenGL的菜单功能
20.7.1 创建GLUT菜单
20.7.2 创建和管理多个GLUT菜单
20.7.3 创建GLUT子菜单
20.7.4 修改GLUT菜单
20.8 图形用户界面的设计
20.8.1 用户对话
20.8.2 窗口和图符
20.8.3 适应多种熟练程度的用户
20.8.4 一致性
20.8.5 减少记忆量
20.8.6 回退和出错处理
20.8.7 反馈
20.9 小结
参考文献
练习题
附加综合题
第21章 全局光照
21.1 光线跟踪方法
21.1.1 基本光线跟踪算法
21.1.2 光线与对象表面的求交计算
21.1.3 光线-球面求交
21.1.4 光线-多面体求交
21.1.5 减少对象求交计算量
21.1.6 空间分割方法
21.1.7 模拟照相机的聚焦效果
21.1.8 光线跟踪反走样
21.1.9 分布式光线跟踪
21.2 辐射度光照模型
21.2.1 辐射能术语
21.2.2 基本辐射度模型
21.2.3 逐步求精的辐射度方法
21.3 环境映射
21.4 光子映射
21.5 小结
参考文献
练习题
附加综合题
第22章 可编程着色器
22.1 着色语言的发展历史
22.1.1 Cook着色树
22.1.2 Perlin像素流编辑器
22.1.3 RenderMan
22.2 OpenGL渲染流水线
22.2.1 固定功能流水线
22.2.2 改变流水线结构
22.2.3 顶点着色器
22.2.4 片元着色器
22.2.5 几何着色器
22.2.6 曲面细分着色器
22.3 OpenGL着色语言
22.3.1 着色器结构
22.3.2 在OpenGL中使用着色器
22.3.3 基本数据类型
22.3.4 矢量
22.3.5 矩阵
22.3.6 结构和数组
22.3.7 控制结构
22.3.8 GLSL函数
22.3.9 与OpenGL的通信
22.4 着色器效果
22.4.1 一个Phong着色器
22.4.2 纹理映射
22.4.3 凹凸映射
22.5 小结
参考文献
练习题
附加综合题
第23章 基于算法的建模
23.1 分形几何方法
23.1.1 分形生成过程
23.1.2 分形分类
23.1.3 分形的维数
23.1.4 确定性自相似分形几何构造
23.1.5 统计自相似分形的几何构造
23.1.6 仿射分形构造方法
23.1.7 随机中点位移方法
23.1.8 地面图控制
23.1.9 自平方分形
23.1.10 自逆分形
23.2 粒子系统
23.3 形状语法和其他过程方法
23.4 小结
参考文献
练习题
附加综合题
第24章 数据集可视化
24.1 标量场的可视化表示
24.2 向量场的可视表示
24.3 张量场的可视表示
24.4 多变量数据场的可视表示
24.5 小结
参考文献
练习题
附加综合题
附录A 计算机图形学的数学基础
附录B 图形文件格式
附录C OpenGL的世界
参考文献
索引
展开
译 者 序
交互式计算机图形学的飞速发展令人兴奋, 其广泛的应用使科学、 艺术、 工程、 商务、 工业、 医药、 政府、 娱乐、 广告、 教学、 培训和家庭等各方面均获得巨大收益。 由Donald Hearn和M. Pauline Baker合著的《计算机图形学》初版于1986年, 在1994年进行了部分修改, 1997年又将其重写, 推出了第二版。2004年, 两位作者再次对本书进行了大幅度的修改, 推出了第三版。本书第二版和第三版的中文翻译版在国内深受广大读者的欢迎。2011年作者在总结多年教学实践的基础上, 对第三版再次进行了从内容到习题的全面扩充, 覆盖了计算机图形学的最新进展, 并对主题顺序进行了更合理的组织, 推出了现在的第四版。
为了适应计算机图形学的发展并促进其应用, 几乎所有的高等学校均已开设了计算机图形学课程。人们都希望有更新、 更好的计算机图形学教材。基于对本书不断修改、 越来越完善的认同, 我们继续把本书第四版介绍给国内读者, 希望能对计算机图形学的教学、 研究与应用起到积极的作用。 本书由蔡士杰和杨若瑜共同翻译。蔡士杰翻译了第1章~第13章, 杨若瑜翻译了其余部分。由于译者的水平有限, 书中难免出现错误和不妥之处, 敬请读者不吝赐教。
前 言中文翻译版中的一些字体、 正斜体、 图示等沿用了英文原版的写作风格, 特此说明。
计算机图形学是最激动人心且快速增长的现代技术之一。自本书第一版出版以来, 计算机图形学已成为应用软件和普通计算机系统中的标准特性。计算机图形学方法已被应用到许多产品的设计之中, 如培训仿真、 音乐视频和电视广告的制作、 体育图片、 数据分析、 科学研究、 医疗等。这些应用领域现在已使用大量的技术和硬件设备或正在研发新的技术与硬件设备。多数今天的计算机图形学研究重点仍在于增强有效性、 现实性和图片生成的速度方面。这些领域的复杂材料如头发、 布料和液压传动研究的现实渲染的困难性, 以及图像处理、 动画和表面表示, 仍是研究人员关注的焦点。作为商品的高级图形硬件的可用性, 意味着任何计算机实际上可生成高质量的图像, 并且可编程图形处理的使用与提高效率是人们日益关注的研究领域之一。
第四版的新特性
过去几年来授课时的各种讲义内容, 已添加到了第四版中, 包括计算机图形学导论、 高级计算机图形学、 科学可视化、 专题和项目课程等。● 罗切斯特理工大学的Warren Carithers教授加入了本书的编写。
● 新增了通过OpenGL Shading Language (GLSL)来介绍可编程着色器一章。
● 给出了OpenGL演化的内容, 并简要介绍了OpenGL 3.x和4.x的不同, 以及CPU体系结构的过去、 现在与将来。
● 解释了在非C和C++语言(如Java和Python语言)中使用OpenGL的方法。
● 将图元和属性的实现算法组织到单独的一章中。
● 将光照模型、 纹理映射和全局照明的内容重新组织到更为紧凑的几章中。
● 更早地探讨了分层建模和动画的内容。
● 重新组织了关于三维对象表示的内容。
● 重新组织了关于二维和三维变换及查看的内容。
● 150道新增习题。
灵活的主题顺序
计算机图形学导论课程是使用许多方法和主题集来讲授的, 我们充分地重组了许多章节的内容和顺序, 以便更灵活地呈现各个主题。名义上, 图元和属性的实现方法已经组合为单独的一章, 而涉及许多主题的较大章节则拆分为几个更小的章节, 以便重点探讨各个主题的内容。
150道新习题和新习题集
与前一版相比, 第四版修订或替换了150道习题, 并在每章的习题部分, 创建了名为“In More Depth”的一个新特性。许多情形下, 这些习题衔接了各章的内容, 允许学生以一种高级的方式来开发OpenGL程序。
OpenGL的变化
在使用可编程GPU的情形下, 许多图形API(包括OpenGL)正在转为使用可编程着色器来对强大的硬件提供直接访问。相应地, 书中也添加了相关的内容, 这些内容以一种灵活的方式来表现, 新增了一个附录来专门介绍OpenGL的演化、 OpenGL在非C和C++语言中的使用、 GPU的性能等。自本书前一版出版以来, OpenGL的性能已经在很大程度上得到了改观。当时, OpenGL推出仅十多年, 并且刚发布版本为OpenGL 1.5。尽管当时OpenGL的功能已经很强大, 但仍是使用原始的定点函数流水线模型实现的。自那以后, OpenGL的内部组成得到了很大提升, 可以更好地使用当前的图形硬件; 进而这些提升导致了OpenGL API的重要变化。
在准备本书的这一版时, 我们讨论过是否需要完全修订关于OpenGL及新API的内容。经过与教师的仔细探讨及沟通, 我们决定在这一版的讨论中继续使用最初的接口和例子, 原因如下: ● 本书提供的只是OpenGL的简单介绍, 并且最初的API对于选修图形学的学生来说更易于掌握。
● 在现在及可以预见的将来, 仍有大量使用最初API的原有OpenGL代码。
● OpenGL的最新版仍以一种兼容的方式支持最初的API。
● 对于几种流行的操作系统, 唯一可用的OpenGL实现仅支持最初的API。
关于封面
原版书的封面图像是一块方形板被钢弹击中时破裂的静态仿真画面。这一仿真是使用有限元代码计算的, 有限元代码动态地重构了仿真过程中的格网。重新划分格网也调整了仿真格网的分辨率, 因此足以解决破裂这一复杂的物理效果。这一方法的详细描述, 请参阅Martin Wicke、 Daniel Ritchie、 Bryan M. Klingner、 Sebastian Burke、 Jonathan R. Shewchuk和James F. O’Brien于2010年7月在学报ACMSIGGRAPH上发表的文章“Dynamic Local Remeshing for Elastoplastic Simulation”。
编程示例
第四版中提供了20多个完整的C++程序, 这些程序使用了OpenGL、 GLU和GLUT库文件。这些程序演示了基本的构图技术、 二维和三维几何变换、 二维和三维查看方法、 透视投影、 样条生成、 分形方法、 交互式鼠标输入、 选取操作、 菜单和子菜单显示及动画技术的应用。此外, 给出了100多个C++/OpenGL程序段, 来演示剪切、 光照效果、 表面渲染、 纹理映射、 可编程着色和许多其他计算机图形学方法的算法实现。
先修课程要求
我们假定读者之前并不了解计算机图形学, 但要求读者具备计算机编程和基本的数据结构知识, 如数组、 指针列表、 文件和记录等。在计算机图形学算法中, 使用了许多数学方法, 它们在附录A中详细描述。附录A中包含的数学主题有解析几何、 线性代数、 矢量和张量分析、 复数、 四元法、 基本积分学和数值分析等。第四版既可作为之前无计算机图形学背景的学生的教材, 也可作为图形专业人士的参考书。本书的重点在于设计、 使用和理解计算机图形系统时所需的基本原理, 并且提供了大量的示例程序来演示每个主题的方法与应用。
课程教学建议
一学期或两学期课程
对于一学期的课程, 可根据课程设置的要求, 选择讲授关于二维方法的主题, 或组合讲授二维与三维方法的主题。对于两学期的课程, 可在第一学期介绍基本的图形学概念与算法, 然后在第二学期介绍高级的三维方法。
对于本科生的计算机图形学导论课程, 可选择讲授第2章至第10章及第17章至第20章的内容。从这些章节中, 仅选择关于二维或三维(或二维和三维的组合)方法的小节, 以及关于光照和彩色的有限内容。另外一些主题, 如分形表示、 样条曲线、 纹理映射或深度缓存, 可在第一次计算机图形学课程中介绍。
对于导论性研究生课程或高年级本科生课程, 则要将重点放在三维查看、 三维建模、 光照模型和表面渲染方法上。但一般来说, 两学期的课程可以更好地覆盖二维和三维计算机图形学方法的基础知识, 包括样条表示、 表面渲染和射线追踪等。
对于具备基本计算机图形学知识的学生, 可以在一两个领域开设专题课程, 如可视化技术、 分形几何、 射线追踪、 辐射度和计算机动画。
自学者
对于自学者, 可学习前面的几章来了解图形学的基本概念, 然后从后面的几章中选学相关的主题。
章节内容
第1章通过研究人们使用图形软件生成的各类图片, 来说明计算机图形学应用的多样性。第2章给出计算机图形学的基本词汇, 并简单介绍图形系统的硬件和软件组成。第3章详细介绍OpenGL, 并给出一个完整的OpenGL示例程序。第4章至第6章介绍简单对象表示与显示的基本方法, 并探讨生成基本图片成分(如多边形和圆)的方法, 以及设置对象颜色、 大小和其他属性的方法。第4章和第5章介绍这些主题并探讨它们在OpenGL中的使用; 第6章介绍绘制图元并修改属性的底层算法。第7章和第8章讨论在二维场景中执行几何变换(如旋转和缩放)和查看变换的算法; 第9章和第10章讨论在三维场景中执行几何变换和查看变换的算法。第11章介绍复杂系统的分层建模方法。第12章介绍计算机动画技术。第13章、 第14章和第15章讨论复杂对象(如二次曲面、 样条和实心几何体)的显示方法。第16章介绍在三维场景中识别可视对象的各种计算机图形学技术。第17章介绍照明模型和对场景应用光照条件的方法。第18章介绍表示表面细节的纹理与方法。第19章介绍计算机图形学中有用的各种彩色模型和设计彩色的考虑因素。第20章介绍交互式图形输入和设计图形用户界面的方法。第21章介绍与全局照明相关的概念。第22章介绍可编程着色器。第23章介绍分形、 粒子系统和其他建模技术。第24章讨论数据集的可视化。
教学资源申请方式请参见书末的“教学支持说明”。
以下受保护的教学资源可通过出版商的网站http://www.pearsonhighered.com/hearn获得。关于用户名和密码等信息, 请与Pearson公司的销售代表联系。● 教师习题解答手册。
● 可下载的源代码。
● 图形与图像的幻灯片。
致谢
过去几年来, 许多人以各种方式对本书做出了贡献。
对于提供照片和其他内容的单位与个人, 我们表示衷心的感谢。还要感谢参加各种计算机图形学和可视化课程的学生所提供的意见。感谢那些为本书内容提供建议、 意见的同仁, 也向未能成功递交建议与意见的同仁表示歉意。
感谢Ed Angel、 Norman Badler、 Phillip Barry、 Brian Barsky、 Hedley Bond、 Bart Braden、 Lara Burton、 Robert Burton、 Greg Chwelos、 John Cross、 Steve Cunningham、 John DeCatrel、 Victor Duvaneko、 Gary Eerkes、 Parris Egbert、 Tony Faustini、 Thomas Foley、 Thomas Frank、 Don Gillies、 Andrew Glassner、 Jack Goldfeather、 Georges Grinstein、 Eric Haines、 Robert Herbst、 Larry Hodges、 Carol Hubbard、 EngKiat Koh、 Mike Krogh、 Michael Laszlo、 Suzanne Lea、 Michael May、 Nelson Max、 David McAllister、 Jeffrey McConnell、 Gary McDonald、 C. L. Morgan、 Greg Nielson、 James Oliver、 LeeHian Quek、 Laurence Rainville、 Paul Ross、 David Salomon、 Günther Schrack、 Steven Shafer、 Cliff Shaffer、 Pete Shirley、 Carol Smith、 Stephanie Smullen、 Jeff Spears、 William Taffe、 Wai Wan Tsang、 Spencer Thomas、 Sam Uselton、 David Wen、 Bill Wicker、 Andrew Woo、 Angelo Yfantis、 Marek Zaremba和Michael Zyda。
特别感谢那些为本书提供其他内容的同仁, 包括Rosario Leonardi (PERCRO Scuola Superiore Sant’Anna)、 Paul Nagin (Chimborazo Publishing, Inc.)、 James O’Brien (University of California, Berkeley)、 Emanuele Ruffaldi (PERCRO Scuola Superiore Sant’Anna)和Graham Sellers (Advanced Micro Devices, Inc.)。
还要感谢我们的审阅者Emmanuel Agu (Worcester Polytechnic Institute)、 Ye Duan (University of Missouri, Columbia)、 John Hart (University of Illinois)、 JongKwanLee (Bowling Green State University)、 StephenMann (University of Waterloo)、 Timothy Newman (University of Alabama, Huntsville)、 Amar Raheja (California State Polytechnic Institute, Pomona)、 AdrianRusu (Rowan University)、 Jergen Schulze (University of California, San Diego)、 Soon Tee Teoh (San Jose State University)、 Iren Valova (University of Massachusettes, Dartmouth)、 Stephen Wismath (University of Lethbridge)和Dana Wortman (University of Colorado, Colorado Springs)。
最后, 感谢本书的编辑和印制人员Tracy Dunkelberger、 Melinda Haggerty、 Marilyn Lloyd和 Martha Wetherill, 感谢你们在第四版的出版过程中所给予的帮助、 建议、 鼓励、 细致和耐心。
展开