第1章 计算机图形学简介 1
1.1 计算机图形学 1
1.2 计算机图形学的起源 2
1.3 计算机图形学的硬件 3
1.3.1 GPU 3
1.3.2 图形显示器 4
1.4 计算机图形学的标准 5
1.5 习题 7
第2章 MFC图形编程基础 8
2.1 MFC概述 8
2.2 创建MFC项目 9
2.2.1 使用MFC AppWizard创建MFC项目 9
2.2.2 MFC项目工作区 14
2.2.3 文档/视图体系 16
2.3 设备环境DC和OnDraw函数 17
2.4 CDC类常用绘图函数 21
2.4.1 SetPixel函数和GetPixel函数 21
2.4.2 LineTo函数和MoveTo函数 22
2.4.3 Polyline函数和PolylineTo函数 23
2.4.4 Arc函数和ArcTo函数 23
2.4.5 AngleArc函数 24
2.4.6 PolyBezier函数和PolyBezier-To函数 24
2.4.7 Rectangle函数 25
2.4.8 RoundRect函数 25
2.4.9 Ellipse函数 26
2.4.10 Pie函数 26
2.4.11 Chord函数 26
2.4.12 Polygon函数 26
2.4.13 PolyPolygon函数 26
2.5 交互操作 29
2.5.1 菜单 29
2.5.2 工具栏 37
2.5.3 鼠标绘图 42
2.5.4 键盘 47
2.5.5 对话框 50
2.6 绘图工具 55
2.6.1 库存绘图工具 56
2.6.2 自定义绘图工具 57
2.7 绘图属性 60
2.7.1 设置背景模式和背景颜色 60
2.7.2 设置画弧方向 61
2.7.3 设置绘图模式 62
2.8 视图重画 63
2.9 习题 65
第3章 图形基元扫描转换算法 67
3.1 直线段扫描转换算法 67
3.1.1 DDA直线段扫描转换算法 67
3.1.2 中点画线法 69
3.1.3 Bresenham画线算法 75
3.2 圆的扫描转换算法 81
3.2.1 中点画圆法 81
3.2.2 Bresenham画圆算法 83
3.3 区域填充算法 85
3.3.1 种子填充算法 86
3.3.2 多边形扫描转换算法 90
3.4 习题 100
第4章 图形变换 101
4.1 矩阵表示和齐次坐标 101
4.1.1 向量及向量运算 101
4.1.2 矩阵及矩阵运算 102
4.1.3 齐次坐标 104
4.2 基本二维几何变换 105
4.2.1 平移变换 105
4.2.2 比例变换 106
4.2.3 旋转变换 107
4.2.4 齐次坐标表示二维图形变换 107
4.3 其他二维变换 109
4.3.1 对称变换 109
4.3.2 错切变换 110
4.4 二维坐标系变换 111
4.5 二维图形裁剪 112
4.5.1 窗口变换 112
4.5.2 视见变换 113
4.5.3 直线段裁剪算法 114
4.5.4 其他图形的裁剪 121
4.6 三维空间的几何变换 124
4.6.1 平移变换 124
4.6.2 比例变换 125
4.6.3 旋转变换 126
4.7 投影 129
4.7.1 世界坐标系到观察坐标系的变换 130
4.7.2 平行投影 130
4.7.3 透视投影 132
4.7.4 三维图形的裁剪 134
4.8 习题 135
第5章 曲线与曲面 137
5.1 基础知识 137
5.1.1 参数曲线与参数曲面 137
5.1.2 型值点 138
5.1.3 控制点 139
5.1.4 混合函数 139
5.1.5 曲线和曲面的拼接 140
5.1.6 曲线的连续性 140
5.2 三次Hermite曲线 141
5.2.1 三次Hermite多项式 141
5.2.2 Hermite曲线绘制的程序设计 142
5.3 Bézier曲线 147
5.3.1 Bézier曲线的定义 148
5.3.2 Bézier曲线的绘制 149
5.3.3 Bézier曲线与Hermite曲线间的转换 151
5.3.4 Bézier曲线绘制的程序设计 152
5.4 B样条曲线 157
5.4.1 递归定义 157
5.4.2 节点向量 158
5.4.3 非递归定义 160
5.4.4 二次均匀B样条曲线 161
5.4.5 三次均匀B样条曲线 161
5.4.6 反求B样条曲线控制点 164
5.4.7 B样条曲线和Bézier曲线间的转换 165
5.4.8 B样条曲线绘制的程序设计 167
5.5 双三次Coons曲面 176
5.5.1 Coons双三次曲面片 177
5.5.2 Coons曲面绘制的程序设计 179
5.6 Bézier曲面 186
5.6.1 Bézier曲面的数学表达式 186
5.6.2 双二次Bézier曲面 186
5.6.3 双三次Bézier曲面 187
5.6.4 Bézier曲面绘制的程序设计 188
5.7 B样条曲面 194
5.7.1 双二次B样条曲面 195
5.7.2 双三次B样条曲面 195
5.7.3 B样条曲面绘制的程序设计 196
5.8 习题 198
第6章 图形计算与形体表示 200
6.1 线段的交点计算 200
6.1.1 两直线段的交点 200
6.1.2 多条线段求交的扫描线算法——Bentley-Ottmann 201
6.2 平面中的凸包算法 204
6.2.1 Graham扫描算法 204
6.2.2 Jarvis卷包裹算法 205
6.3 包含与重叠 206
6.3.1 点对简单多边形的包含算法 206
6.3.2 点对凸多边形的包含算法 207
6.3.3 凸多边形的重叠计算 208
6.4 简单多边形的三角剖分 211
6.5 形体的表示模型 216
6.5.1 单元分解表示法 216
6.5.2 构造表示 217
6.5.3 边界表示 219
6.6 三角网格 221
6.6.1 网格表示 222
6.6.2 点集的三角剖分 223
6.7 习题 228
第7章 消隐 229
7.1 外法向量法消除隐藏线 229
7.2 曲面隐藏线消除的浮动水平线算法 231
7.3 画家算法 231
7.4 z-缓冲算法 233
7.5 习题 234
第8章 计算机动画 235
8.1 关键帧动画 235
8.1.1 参数关键帧技术 235
8.1.2 轨迹驱动动画技术 236
8.1.3 物体朝向插值技术 236
8.1.4 关键帧动画实例 237
8.2 Morphing变形动画 239
8.2.1 图像Morphing技术 240
8.2.2 三维Morphing技术 241
8.2.3 Morphing动画实例 242
8.3 骨骼动画 244
8.4 粒子系统 248
8.5 习题 255
第9章 基于Direct3D的真实感图形绘制 256
9.1 DirectX与Direct3D简介 256
9.2 Direct3D程序基本结构 257
9.2.1 创建程序框架 257
9.2.2 初始化Direct3D 259
9.2.3 渲染 261
9.2.4 释放接口 262
9.3 三维几何模型的绘制 263
9.3.1 数学概念 263
9.3.2 图元格式 265
9.3.3 坐标变换 266
9.3.4 顶点格式 269
9.3.5 绘制实例 270
9.4 索引缓存和Z缓存 275
9.4.1 索引缓存 275
9.4.2 创建索引缓存 277
9.4.3 渲染索引缓存 279
9.4.4 打开Z缓存 279
9.4.5 填充模式 281
9.5 光照效果 283
9.5.1 局部光照模型 283
9.5.2 Whitted整体光照模型的实现 287
9.5.3 光照 288
9.5.4 材质 290
9.5.5 网格生成函数 291
9.5.6 添加光照和材质 294
9.5.7 多边形网格明暗处理 296
9.5.8 阴影 298
9.6 网格模型 301
9.6.1 网格中的信息 301
9.6.2 建模 304
9.6.3 绘制 305
9.7 纹理 309
9.7.1 基本概念 309
9.7.2 创建纹理 312
9.7.3 用纹理渲染 313
9.8 习题 314
参考文献 316