第1章 计算机图形学概论 1
1.1 计算机图形学及其研究内容 1
1.2 计算机图形学的发展历程 2
1.3 计算机图形学的应用 4
1.3.1 图形用户界面 4
1.3.2 计算机辅助设计与制造 5
1.3.3 科学计算可视化 6
1.3.4 图形实时绘制与自然景物仿真 6
1.3.5 计算机动画 7
1.3.6 计算机艺术 7
1.3.7 地理信息系统 8
1.3.8 虚拟现实 8
1.4 计算机图形系统 9
1.4.1 计算机图形系统的功能及系统结构 9
1.4.2 图形输入设备 10
1.4.3 图形显示设备 15
1.4.4 光栅图形扫描系统 25
1.4.5 图形硬拷贝输出设备 27
1.4.6 图形软件 28
习题 31
第2章 Visual C++环境下OpenGL图形开发 33
2.1 OpenGL概述 33
2.1.1 OpenGL基本功能和操作 33
2.1.2 OpenGL工作方式 35
2.1.3 OpenGL相关库函数 36
2.1.4 OpenGL数据类型和函数名 37
2.2 Visual C++环境下OpenGL开发框架 37
2.2.1 OpenGL控制台应用程序框架 38
2.2.2 MFC环境下OpenGL单文档应用程序框架 40
2.2.3 OpenGL绘制描述表与设备描述表 42
2.2.4 OpenGL像素格式设置 43
2.3 基本图元绘制 44
2.3.1 图形显示控制 44
2.3.2 设置3D画布 47
2.3.3 点绘制 49
2.3.4 线段绘制 50
2.3.5 多边形绘制 51
习题 52
第3章 基本图元生成算法 53
3.1 线段的生成 53
3.1.1 DDA画线算法 54
3.1.2 中点画线算法 56
3.1.3 Bresenham画线算法 58
3.1.4 并行画线算法 60
3.2 圆的生成 61
3.2.1 圆的特性 61
3.2.2 中点画圆算法 61
3.2.3 Bresenham画圆算法 63
3.3 区域填充 64
3.3.1 多边形分类与识别 65
3.3.2 扫描线填色算法 66
3.3.3 种子填色算法 70
3.3.4 OpenGL多边形区域填充函数、像素阵列函数 71
3.4 字符的生成 75
3.4.1 点阵式字符 75
3.4.2 矢量字符 76
3.4.3 OpenGL字符函数 76
3.5 其他曲线 76
3.5.1 圆锥曲线 77
3.5.2 多项式和样条曲线 77
3.6 图元属性控制 77
3.6.1 颜色 78
3.6.2 点的属性 81
3.6.3 线的属性 81
3.7 反走样 83
3.7.1 直线段的过取样 83
3.7.2 区域取样 85
3.7.3 像素移相 87
3.7.4 OpenGL反走样函数 87
习题 88
第4章 曲线和曲面 89
4.1 曲线、曲面表示基础知识 89
4.1.1 曲线、曲面的显式、隐式和参数表示 89
4.1.2 插值和逼近样条 91
4.1.3 参数曲线的连续性条件 92
4.1.4 样条描述 93
4.2 三次插值样条 94
4.2.1 自然三次样条 94
4.2.2 三次Hermite样条 94
4.3 Bézier曲线、曲面 96
4.3.1 Bézier曲线的定义及性质 96
4.3.2 Bézier曲线的矩阵表示 98
4.3.3 Bézier曲线的生成 99
4.3.4 Bézier曲面 101
4.4 B样条曲线、曲面 102
4.4.1 定义及性质 103
4.4.2 均匀周期二次B样条曲线 104
4.4.3 三次周期B样条曲线 106
4.4.4 开放均匀B样条曲线 107
4.4.5 B样条曲面 109
4.5 有理样条曲线、曲面 110
4.6 样条曲线、曲面的离散生成 112
4.7 OpenGL逼近样条函数 115
4.7.1 Bézier样条曲线函数 115
4.7.2 Bézier样条曲面函数 117
4.7.3 NURBS样条曲线函数 118
4.7.4 NURBS曲面函数 120
4.7.5 曲面的剪切 121
习题 123
第5章 图形的几何变换 124
5.1 齐次坐标表示 124
5.2 二维几何变换 124
5.2.1 二维平移变换 125
5.2.2 二维旋转变换 125
5.2.3 二维缩放变换 126
5.2.4 反射变换 127
5.2.5 错切变换 129
5.3 通用二维复合变换 129
5.3.1 复合二维平移 130
5.3.2 复合二维旋转 130
5.3.3 复合二维缩放 130
5.3.4 相对任一参考点的二维几何变换 131
5.4 二维坐标系变换 131
5.4.1 指定角度和原点位置的2个笛卡尔坐标系间的转换 131
5.4.2 指定向量和原点位置的2个笛卡尔坐标系间的转换 132
5.5 三维空间的几何变换 133
5.5.1 三维平移变换 133
5.5.2 简单三维旋转变换 134
5.5.3 简单三维缩放变换 135
5.5.4 三维反射变换 135
5.5.5 三维错切变换 136
5.5.6 三维复合变换 136
5.5.7 三维坐标系间的变换 138
5.6 OpenGL几何变换函数 139
5.6.1 几何变换 139
5.6.2 OpenGL矩阵操作 141
5.6.3 OpenGL短阵栈 142
习题 142
第6章 二维观察 143
6.1 二维观察变换 143
6.2 观察坐标系变换 146
6.3 窗口到视区的变换 147
6.3.1 从窗口到视区的一般变换过程 147
6.3.2 窗口到视区的变换 148
6.4 OpenGL二维观察函数 149
6.4.1 指定投影模式 149
6.4.2 设置裁剪窗口函数 149
6.4.3 视区设置函数 149
6.4.4 建立GLUT显示窗口 150
6.4.5 设定GLUT显示窗口的模式和颜色 150
6.4.6 GLUT显示窗口位置和大小的修改 150
6.4.7 在GLUT显示窗口中观察图形对象 151
6.4.8 执行应用程序 151
6.5 裁剪算法 151
6.5.1 二维点裁剪 152
6.5.2 二维直线裁剪 152
6.5.3 Cohen_Sutherland线段裁剪算法 153
6.5.4 Liang-Barsky线段裁剪算法 155
6.5.5 Nicholl-Lee-Nicholl线段裁剪算法 157
6.6 多边形裁剪 159
6.6.1 Sutherland-Hodgman多边形裁剪算法 159
6.6.2 Weiler-Atherton多边形裁剪算法 161
6.7 文字裁剪 163
习题 163
第7章 三维观察 164
7.1 三维观察与观察流程 164
7.2 三维观察坐标系 165
7.2.1 三维观察坐标系定义 165
7.2.2 世界坐标系向三维观察坐标系的变换 166
7.2.3 生成观察效果 167
7.3 投影变换 167
7.3.1 平行投影 168
7.3.2 透视投影 174
7.4 三维裁剪算法 183
7.4.1 三维Cohen-Sutherland线段裁剪算法 183
7.4.2 其他三维形体的裁剪 184
7.4.3 OpenGL附加裁剪面 185
习题 186
第8章 交互式输入技术与图形用户界面 187
8.1 用户接口模型 187
8.2 逻辑输入设备 189
8.3 图形输入控制方式 191
8.3.1 请求方式 192
8.3.2 取样方式 193
8.3.3 事件方式 194
8.4 交互式绘图技术 195
8.4.1 回显 195
8.4.2 约束 196
8.4.3 橡皮筋技术 196
8.4.4 拖曳技术 197
8.4.5 网格技术 197
8.4.6 拾取技术 197
8.4.7 吸附技术 198
8.5 三维交互技术 198
8.6 OpenGL交互式输入函数 200
8.6.1 交互式输入设备接受函数 200
8.6.2 选择、拾取和反馈操作 202
8.7 图形用户界面设计 204
8.7.1 用户模型 205
8.7.2 显示屏幕的有效利用 205
8.7.3 反馈 206
8.7.4 一致性原则 206
8.7.5 减少记忆量 206
8.7.6 回退与出错处理 207
8.7.7 视觉效果设计 207
8.7.8 适应不同用户 207
习题 207
第9章 三维对象的表示 209
9.1 图形对象的定义及性质 209
9.1.1 图形对象的定义 209
9.1.2 几何信息与拓扑关系 211
9.1.3 正则物体的性质和欧拉公式 212
9.2 三维图形对象的表示方法 215
9.3 规则欧氏几何对象表示 216
9.3.1 边界表示法 216
9.3.2 扫描表示法 218
9.3.3 构造实体几何法 219
9.3.4 八叉树 221
9.3.5 BSP树 223
9.4 非规则对象表示 223
9.4.1 分形几何 223
9.4.2 形状语法 226
9.4.3 粒子系统 226
9.4.4 基于物理的建模 226
9.5 科学计算可视化 227
9.5.1 标量场的可视化 228
9.5.2 向量场的可视化 229
9.5.3 张量场的可视化 230
习题 231
第10章 真实感图形绘制 232
10.1 隐藏线、面消隐 232
10.1.1 凸多面体的隐藏线消除 233
10.1.2 凹多面体的隐藏线消除 234
10.1.3 区域排序面消隐算法 237
10.1.4 深度缓存算法 238
10.1.5 光线投射算法 239
10.1.6 扫描线Z缓冲区算法 239
10.2 OpenGL可见性检查函数 241
10.2.1 多边形隐藏面剔除函数 241
10.2.2 深度缓存函数 241
10.3 光照模型 242
10.3.1 光源特性 243
10.3.2 物体表面特性 244
10.3.3 简单光照模型 244
10.3.4 光强衰减 246
10.4 基于简单光照模型的多边形绘制 246
10.4.1 恒定光强多边形绘制 246
10.4.2 Gouraud明暗处理 247
10.4.3 Phong明暗处理 248
10.5 阴影生成 249
10.6 景物表面细节模拟 249
10.6.1 用多边形模拟表面细节 250
10.6.2 纹理映射 250
10.6.3 凹凸纹理映射 251
10.7 整体光照模型与光线跟踪 252
10.7.1 整体光照模型 252
10.7.2 光线跟踪 253
10.8 OpenGL光照和物体表面特性函数 258
10.8.1 OpenGL光照函数 258
10.8.2 物体表面特性函数 262
10.9 OpenGL纹理映射 263
习题 266
附录 268
参考文献 296