《交互式计算机图形学 基到OPENGL的自顶向下方法 第3版》PDF下载

  • 购买积分:16 如何计算积分?
  • 作  者:EDWARD ANGEL著;吴文国译
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2006
  • ISBN:730212390X
  • 页数:521 页
图书介绍:本书从OpenGL编程角度讨论了图形学基本原理及基本算法。全书共13章,分为三大部分;第一部分为1~6章,主要介绍三维图形程序的开发环境、三维对象的表示方法、空间坐标变换、三维视图的生成过程等内容;第二部分为7~10章,主要介绍光栅扫描、区域填空、画直线和画圆弧、裁剪及消隐等基本理论和基本算法;第三部分为11~13章,主要介绍过程建模技术、可视化处理方法以及高级绘制方法等高级内容。本书的特点是采用了自顶向下的方法,集知识性和趣味性为一体,全书还包括17个完整的、令人感兴趣的OpenGL程序。本书可作为计算机及相关专业本科生和研究生的图形学教材,也适合相关程序员、工程技术人员及科研人员使用。

目录 1

第1章 图形系统和模型 1

1.1 计算机图形学的应用 1

1.1.1 信息显示 1

1.1.2 设计 2

1.1.3 仿真与动画 2

1.1.4 用户界面 3

1.2 计算机图形系统 3

1.2.1 像素与帧缓存 4

1.2.2 输出设备 4

1.2.3 输入设备 6

1.3 图像:物理方法和人工合成方法 6

1.3.1 对象与观察者 6

1.3.2 光照与图像 7

1.3.3 光线跟踪 8

1.4 人眼的视觉系统 9

1.5 针孔照相机 11

1.6 虚拟照相机模型 12

1.7 程序员接口 13

1.7.1 应用程序开发人员的接口 14

1.7.2 笔式绘图仪模型 14

1.7.3 三维API函数 16

1.7.4 彩图介绍 17

1.7.5 建模-绘制模式 18

1.8 图形系统的体系结构 19

1.8.1 显示处理器 19

1.8.2 流水线结构 20

1.8.3 变换 20

1.8.7 性能特性 21

1.8.6 光栅化 21

1.8.5 投影 21

1.8.4 裁剪 21

1.9 小结 22

1.10 补充阅读材料 22

习题 23

第2章 图形学编程 25

2.1 Sierpinski镂垫 25

2.2 二维应用程序编程 26

2.3 OpenGLAPI工具包 29

2.3.1 图形函数 30

2.3.2 图形流水线和状态机 31

2.3.3 OpenGL接口 31

2.4 图元与属性 32

2.4.1 多边形基本概念 33

2.4.2 OpenGL里的多边形类型 34

2.4.3 绘制球体 35

2.4.4 字符 37

2.4.5 曲线和曲面 38

2.4.6 属性 38

2.5 颜色 39

2.5.1 RGB颜色 41

2.5.2 索引颜色 42

2.5.3 设置颜色属性 44

2.6 视图处理 44

2.6.1 二维视图 44

2.6.2 正交视图 45

2.6.3 矩阵模式 46

2.7 控制函数 47

2.7.1 与Windows操作系统的交互作用 47

2.7.2 纵横比和视口 48

2.7.3 main()、display()和myinit()函数 49

2.8 Sierpinski镂垫程序 50

2.7.4 程序结构 50

2.9 多边形与递归过程 52

2.10 三维Sierpinski镂垫 54

2.10.1 使用三维点 54

2.10.2 在三维空间里使用多边形 55

2.10.3 隐藏面消除 56

2.11 小结 57

2.12 补充阅读材料 58

习题 59

第3章 输入与交互 62

3.1 交互模式 62

3.2 输入设备 63

3.2.1 物理输入设备 63

3.2.2 逻辑设备 65

3.2.4 输入模式 66

3.2.3 测量与触发 66

3.3 客户-服务器结构 67

3.4 显示列表 68

3.4.1 显示列表的定义和运行 69

3.4.2 字符和显示列表 71

3.4.3 GLUT库里的字体 73

3.5 事件驱动输入的编程 74

3.5.1 使用指向输入设备 74

3.5.2 窗口事件 76

3.5.3 键盘事件 78

3.5.4 显示回调函数和空闲回调函数 78

3.5.5 窗口管理 79

3.6 菜单 79

3.7 拾取 80

3.8 一个简单的画图程序 . 85

3.9 交互式动画程序 89

3.9.1 旋转的正方形 90

3.9.2 双缓存 91

3.9.3 其他一些缓存问题 92

3.10 交互式程序的设计 93

3.11 逻辑运算 94

3.11.1 绘制可以删除的线段 95

3.11.2 异或操作(XOR)和颜色 97

3.11.3 光标与覆盖层位平面 97

3.12 小结 98

3.13 补充阅读材料 98

习题 99

第4章 几何对象与坐标变换 102

4.1 标量、点和矢量 102

4.1.1 几何观点 102

4.1.3 数学观点:矢量与仿射空间 104

4.1.2 与坐标无关的几何对象 104

4.1.4 计算机科学的观点 105

4.1.5 几何抽象数据类型(ADT) 105

4.1.6 直线 106

4.1.7 仿射加 107

4.1.8 凸性 107

4.1.9 点积和叉积 108

4.1.10 平面 109

4.2 三维图元 110

4.3 坐标系与标架 111

4.3.1 矢量表示与n元组 112

4.3.2 坐标系的变换 113

4.3.3 坐标变换的例子 114

4.3.4 齐次坐标 115

4.3.5 标架变换的例子 117

4.3.7 标架系统与抽象数据类型 119

4.3.6 表示矩阵的运算处理 119

4.3.8 OpenGL里的标架系统 121

4.4 建立一个彩色立方体模型 123

4.4.1 一个立方体模型 123

4.4.2 内侧面与外侧面 124

4.4.3 对象表示的数据结构 124

4.4.4 彩色立方体 125

4.4.5 双线性插值 126

4.4.6 顶点数组 127

4.5 仿射变换 128

4.6 平移、旋转和缩放 130

4.6.1 平移变换 130

4.6.2 旋转变换 131

4.6.3 缩放变换 132

4.7.1 平移 133

4.7 齐次坐标表示的变换公式 133

4.7.2 缩放 134

4.7.3 旋转 134

4.7.4 剪切变换 135

4.8 变换的串乘运算 136

4.8.1 绕某一固定点的旋转 137

4.8.2 一般的旋转变换 138

4.8.3 实例变换 139

4.8.4 绕任一轴旋转 140

4.9 OpenGL中的变换矩阵 142

4.9.1 当前变换矩阵 142

4.9.2 旋转、平移和缩放 143

4.9.3 在OpenGL中绕固定点旋转 144

4.9.4 变换次序 144

4.9.5 立方体的旋转 145

4.10 三维应用程序的交互方式 146

4.9.6 矩阵的装载、压栈和弹栈操作 146

4.10.1 利用屏幕区域 147

4.10.2 一个虚拟跟踪球 147

4.10.3 平滑旋转 149

4.10.4 递增式旋转 149

4.11 四元数 150

4.11.1 复数与四元数 150

4.11.2 四元数与旋转 151

4.12 小结 152

4.13 补充阅读材料 153

习题 153

第5章 视图 155

5.1 经典视图和计算视图 155

5.1.1 经典视图 156

5.1.3 轴测法投影 157

5.1.2 正则投影 157

5.1.4 斜投影 158

5.1.5 透视图 158

5.2 计算机视图 159

5.3 照相机定位 160

5.3.1 照相机标架定位 160

5.3.2 两个处理视图的API工具包 164

5.3.3 Look-At函数 166

5.3.4 其他视图API工具包 167

5.4 简单投影 168

5.4.1 透视投影 168

5.4.2 正交投影 170

5.5 OpenGL的投影视图 171

5.5.1 OpenGL的透视投影 172

5.5.2 OpenGL平行视图 173

5.6 隐藏面消除 174

5.7 在场景中漫游 175

5.8 平行投影矩阵 177

5.8.1 投影正则化 177

5.8.2 正交投影矩阵 178

5.8.3 斜投影 179

5.9 透视投影矩阵 181

5.9.1 透视正则化 182

5.9.2 OpenGL的透视变换 184

5.10 投影与阴影 185

5.11 小结 187

5.12 补充阅读材料 188

习题 188

第6章 明暗处理 190

6.1 光与材质 190

6.2.1 彩色光源 192

6.2 光源 192

6.2.2 环境光 193

6.2.3 点光源 193

6.2.4 聚光灯 194

6.2.5 远距离光源 194

6.3 Phong反射模型 195

6.3.1 环境反射 196

6.3.2 漫反射 196

6.3.3 镜面反射光 197

6.4 矢量计算 199

6.4.1 法向矢量 199

6.4.2 反射角度 201

6.4.3 利用中值矢量 202

6.4.4 折射光 202

6.5 多边形的明暗处理 203

6.5.1 平面明暗处理 204

6.5.2 插值和Gouraud明暗处理方法 205

6.5.3 Phong明暗处理方法 206

6.6 球面的递归细分逼近 206

6.7 OpenGL中的光源 209

6.8 OpenGL里的材质说明 211

6.9 球体模型的明暗处理 213

6.10 全局绘制 214

6.11 小结 215

6.12 补充阅读材料 216

习题 216

第7章 离散技术 218

7.1 缓存 218

7.2 数字图像 219

7.3 缓存写操作 221

7.3.1 写入模式 222

7.4 OpenGL里的位运算和像素运算 223

7.3.2 异或写入模式 223

7.4.1 OpenGL的缓存和像素管道 224

7.4.2 位图 225

7.4.3 光栅字体 225

7.4.4 像素与图像 226

7.4.5 查找表 227

7.4.6 用于拾取的缓存 228

7.5 映射方法 228

7.6 纹理映射 229

7.6.1 二维纹理映射 230

7.6.2 OpenGL里的纹理映射 234

7.6.3 纹理对象 239

7.6.4 多纹理通道 239

7.6.5 创建纹理对象 239

7.7 环境贴图 240

7.8 凹凸贴图 242

7.9.1 不透明性与融合 243

7.9 图像合成技术 243

7.9.2 图像合成 244

7.9.3 OpenGL里的融合与合成 244

7.9.4 反走样 245

7.9.5 从后至前和从前至后的绘制过程 246

7.9.6 景深提示和雾效果 247

7.10 多通道绘制与累积缓存 248

7.10.1 场景反走样 248

7.10.2 凹凸贴图和浮雕效果 248

7.10.3 图像处理 249

7.10.4 OpenGL的图像处理扩展集 250

7.10.5 其他多通道方法 250

7.11 采样与走样 251

7.11.1 采样理论 251

7.11.2 重构 254

7.11.3 量化 255

7.12 小结 256

7.13 补充阅读材料 256

习题 257

第8章 渲染器的实现 259

8.1 实现的基本策略 259

8.2 实现过程的4个主要任务 260

8.2.1 建模 261

8.2.2 几何处理 261

8.2.3 光栅化 262

8.2.4 显示 262

8.3 变换的实现 262

8.4 线段裁剪 264

8.4.1 Cohen-Sutherland裁剪算法 264

8.4.2 Liang-Barsky裁剪算法 266

8.5 多边形裁剪 267

8.6 其他图元的裁剪 269

8.6.1 包围盒和包围体 270

8.6.2 曲线、曲面和字符 270

8.6.3 帧缓存里的裁剪操作 271

8.7 三维裁剪 271

8.8 隐藏面消除 273

8.8.1 景物空间和图像空间 273

8.8.2 排序与隐藏面消除 275

8.8.3 背面剔除 275

8.8.4 z-buffer算法 275

8.8.5 深度排序和画家算法 277

8.8.6 扫描线算法 279

8.9 扫描转换 279

8.10 Bresenham算法 281

8.11 多边形的扫描转换 283

8.11.1 内外测试法 283

8.11.2 OpenGL与凹多边形 284

8.11.3 带z-buffer算法的扫描转换 285

8.11.4 填充与排序 286

8.11.5 种子填充算法 286

8.11.6 扫描线填充算法 287

8.11.7 奇异性 287

8.12 反走样 288

8.13 显示器因素 289

8.13.1 颜色系统 290

8.13.2 颜色矩阵 292

8.13.3 γ校正 292

8.13.4 抖动技术与半色调技术 293

8.14 小结 293

8.15 补充阅读材料 294

习题 295

9.1 图符与实例 297

第9章 层级结构和面向对象的建模方法 297

9.2 层级模型 298

9.3 一个机器人手臂 300

9.4 树与树的遍历 302

9.5 树形数据结构的用途 305

9.6 动画 308

9.7 图形对象 309

9.7.1 方法、属性和消息 309

9.7.2 一个立方体对象 310

9.7.3 实现立方体对象 312

9.7.4 对象与层级结构 312

9.7.5 几何对象 313

9.8 场景图 314

9.9 一个简单场景图的API 315

9.9.1 结点类 316

9.9.2 几何结点 317

9.9.3 照相机类 319

9.9.4 光源和材质 320

9.9.5 变换类 321

9.9.6 机器人类 322

9.9.7 实现观察者类 324

9.9.8 实现结点类 327

9.10 其他的树形结构 330

9.10.1 CSG树 330

9.10.2 明暗处理树 332

9.10.3 BSP树 332

9.10.4 四叉树和八叉树 334

9.11 图形与万维网 335

9.11.1 网络与协议 335

9.11.2 超媒体与HTML语言 336

9.11.4 Java与Applets 337

9.11.3 数据库与VRML 337

9.12 小结 338

9.13 补充阅读材料 338

习题 339

第10章 曲线与曲面 340

10.1 曲线和曲面的表示方法 340

10.1.1 显式表示法 340

10.1.2 隐式表示 341

10.1.3 参数形式 342

10.1.4 参数多项式曲线 343

10.1.5 参数多项式曲面 344

10.2 设计准则 345

10.3 三次多项式参数曲线 346

10.4 插值 347

10.4.1 调和函数 348

10.4.2 三次插值面片 349

10.5 Hermite曲线和曲面 351

10.5.1 Hermite形式 351

10.5.2 几何连续和参数连续 353

10.6 Bezier曲线和曲面 354

10.6.1 Bezier曲线 354

10.6.2 Bezier曲面面片 356

10.7 三次B-样条 356

10.7.1 三次B-样条曲线 357

10.7.2 B-样条与基函数 359

10.7.3 样条曲面 360

10.8 一般的B样条函数 360

10.8.1 B-样条的递归定义 361

10.8.2 均匀样条 362

10.8.3 非均匀B-样条 362

10.8.4 NURBS 362

10.9.1 多项式求解方法 363

10.9 曲线和曲面的绘制 363

10.9.2 Bezier多项式的递归细分 364

10.9.3 其他多项式曲线的细分绘制 366

10.9.4 Bezier曲面的细分 367

10.10 犹他大学茶壶模型 368

10.11 代数曲面 370

10.11.1 二次曲面 370

10.11.2 曲面的光线跟踪方法绘制 370

10.11.3 曲线与曲面的细分 371

10.12 OpenGL里的曲线与曲面 373

10.12.1 Bezier曲线 373

10.12.2 Bezier曲面 374

10.12.3 茶壶显示 375

10.12.4 NURBS函数 376

10.13 小结 377

10.14 补充阅读材料 377

10.12.5 二次曲面 377

习题 378

第11章 过程建模方法 379

11.1 使用过程建模的理由 379

11.2 基于物理模型和粒子系统 380

11.3 牛顿粒子 381

11.3.1 独立粒子 382

11.3.2 弹簧力 382

11.3.3 吸引力与排斥力 383

11.4 求解粒子系统 384

11.5 约束 386

11.5.1 碰撞 386

11.5.2 球体内的粒子 388

11.5.3 软约束 389

11.6 基于语言的模型 389

11.7.1 标尺与长度 392

11.7 递归方法与分形几何 392

11.7.2 分形维数 393

11.7.3 中点分割与布朗运动 394

11.7.4 分形山体 395

11.8 Mandelbrot集合 396

11.9 小结 398

11.10 补充阅读材料 398

习题 399

第12章 可视化 400

12.1 数据+几何 400

12.2 高度场和等高线 400

12.2.1 网格 401

12.2.2 等高线图 403

12.2.3 Marching Squares 403

12.3 表面和标量场的可视化 408

12.3.1 体数据集 409

12.3.2 隐函数的可视化 410

12.4 等值面和Marching Cubes 411

12.5 网格简化 413

12.6 直接体绘制 414

12.6.1 颜色和不透明度赋值 414

12.6.2 溅射法 415

12.6.3 体光线跟踪法 416

12.6.4 体的纹理映射 417

12.7 向量场可视化 417

12.7.1 Hedgehog法 417

12.7.2 图示符 418

12.7.3 颜色 419

12.7.4 粒子轨迹和流线 420

12.8 张量可视化 421

习题 422

12.9 小结 422

12.10 补充阅读材料 422

第13章 高级绘制方法 424

13.1 流水线绘制技术不能解决的问题 424

13.2 光线跟踪 425

13.3 建立一个简单的光线跟踪器 427

13.3.1 光线跟踪的递归过程 427

13.3.2 交点计算 428

13.3.3 光线跟踪的变异形式 430

13.4 绘制方程 431

13.5 辐射度 432

13.5.1 辐射度方程 432

13.5.2 求解辐射度方程 433

13.5.3 计算形状因子 434

13.5.4 实现辐射度算法 436

13.7 大规模场景绘制 437

13.6 RenderMan 437

13.7.1 中排序绘制法 438

13.7.2 后排序绘制法 439

13.7.3 先排序绘制法 441

13.8 基于图像的绘制 442

13.9 小结 443

13.10 补充阅读材料 444

习题 444

附录A 实例程序 446

A.1 Sierpinski镂垫程序 447

A.2 生成Sierpinski镂垫的递归程序 448

A.3 生成三维Sierpinski镂垫程序 450

A.4 生成三维Sierpinski镂垫的递归程序 452

A.5 生成正方形程序 454

A.6 画图程序 457

A.7 介绍双缓存使用的程序 464

A.8 用选择模式实现拾取功能程序 466

A.9 立方体旋转程序 469

A.10 利用顶点数组旋转立方体程序 472

A.11 用虚拟跟踪球实现立方体旋转程序 474

A.12 观察者漫游程序 478

A.13 球体的细分逼近程序 481

A.14 像素读写程序 485

A.15 带纹理立方体的旋转程序 486

A.16 场景图形程序实例 490

A.17 画Bezier曲线程序 495

附录B 空间 501

B.1 标量 501

B.2 向量空间 501

B.3 仿射空间 503

B.4 欧几里德空间 504

B.5 投影 505

B.6 格莱姆—施密特正交化 505

B.7 补充阅读材料 506

习题 506

附录C 矩阵 507

C.1 定义 507

C.2 矩阵运算 507

C.3 行矩阵和列矩阵 508

C.4 秩 509

C.5 不同表示之间的转换 510

C.6 叉乘运算 511

C.7 特征值和特征向量 511

C.8 补充阅读材料 512

习题 512

参考文献 514