《计算机图形学 用OpenGL实现 第2版》PDF下载

  • 购买积分:24 如何计算积分?
  • 作  者:F. S. Hill著;罗霄,商青华,袁春阳等译
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2006
  • ISBN:7302117098
  • 页数:919 页
图书介绍:本书详解了计算机图形学的理论和实现方法,以及结合OpenGL的实现。

第1章 计算机图形学导言 1

1.1 什么是计算机图形 1

目录 1

1.2.1 艺术、娱乐以及出版 3

1.2 计算机生成的图片应用在哪些地方 3

1.2.2 计算机图形和图像处理 4

1.2.3 监视过程 5

1.2.4 显示模拟 6

1.2.6 科学分析和可视化 7

1.2.5 计算机辅助设计 7

1.3.1 折线 10

1.3 在计算机图形中创建的图片元素 10

1.3.2 文本 12

1.3.3 实心区域 13

1.3.4 光栅图像 14

1.3.5 灰度阴影的呈现以及光栅图像中的颜色 18

1.4.1 绘线型显示器 21

1.4 图像显示设备 21

1.4.2 光栅显示器 22

1.4.3 索引颜色和查找表格 26

1.4.4 其他的光栅显示设备 29

1.4.5 硬拷贝光栅设备 30

1.5.1 输入图形原语的类型 31

1.5 图形输入原语和设备 31

1.5.2 物理输入设备的类型 32

1.7 进一步阅读 34

1.6 小结 34

2.1 着手创建图片 36

第2章 绘制图片入门 36

2.1.2 基于窗口的编程 38

2.1.1 设备无关编程和OpenGL 38

2.1.3 打开一个绘图窗口 40

2.2 绘制基本图形原语 41

绘制点丛 44

2.3 绘制线条画 50

2.3.1 绘制折线和多边形 51

2.3.2 使用moveto()和lineto()绘制线条 55

2.3.3 绘制校准长方形 56

2.3.4 校准长方形的高宽比 57

2.3.5 填充多边形 59

2.3.6 OpenGL中的其他图形原语 60

2.4.1 鼠标交互作用 61

2.4 使用鼠标和键盘的简单交互作用 61

2.4.2 键盘交互作用 64

2.5 小结 65

案例分析2.1 伪随机点的集合 66

2.6 案例分析 66

案例分析2.2 迭代函数系统导言 68

案例分析2.3 资金分割率和其他的宝石 71

案例分析2.4 建立并使用折线文件 73

案例分析2.5 线条和多边形的点画法 74

案例分析2.6 折线编辑器 75

案例分析2.7 建立并运行迷阵 76

2.7 进一步阅读 78

第3章 更多绘图工具 79

3.2 世界窗口和视口 80

3.1 简介 80

3.2.1 从窗口到视口的映射 82

3.2.2 自动设定窗口和视口 91

3.3.1 裁剪线段 94

3.3 裁剪线 94

3.3.2 Cohen-Sutherland裁剪算法 95

3.4 开发Canvas类 98

3.4.1 一些有用的支持类 99

3.4.2 类Canvas的声明 100

3.4.3 类Canvas的实现方法 101

3.5 相对绘图例程 103

3.5.1 开发moveRel()和lineRel() 104

3.5.2 龟纹绘图历程 105

3.6.1 规则多边形 109

3.6 基于规则多边形的图形 109

3.6.2 n-Gon的变分(Variation) 111

3.7.2 绘制圆弧 115

3.7.1 绘制圆 115

3.7 绘制圆和圆弧 115

3.8.1 曲线的参数形式 119

3.8 对曲线使用参数形式 119

3.8.2 绘制以参数表示的曲线 122

3.8.3 超椭圆(Superellipses) 124

3.8.4 极坐标形状 125

3.8.5 3D曲线 127

3.9 小结 128

案例分析3.1 学习数理逻辑图形和混沌模拟 129

3.10 案例分析 129

案例分析3.2 在C或者C++中实现Cohen-Suther-land裁剪器 131

案例分析3.3 在Turbo C++中实现Canvas 133

案例分析3.4 绘制圆弧 135

案例分析3.5 一些用于物理和工程中的图形 136

案例分析3.6 平铺图案 138

案例分析3.7 主旋律的有趣改变 139

案例分析3.8 圆围绕着圆滚动 141

案例分析3.9 超椭圆 142

3.11 进一步阅读 143

第4章 图形向量工具 144

4.1 简介 145

4.2 向量 147

4.2.1 向量操作 148

4.2.2 向量线性组合 149

4.2.3 向量的大小;单位向量 151

4.3 点积 152

4.3.1 点积的性质 153

4.3.3 b·c的符号和正交性 154

4.3.2 两个向量的夹角 154

4.3.4 2D“正交”向量 156

4.3.5 正交投影和点到线的距离 158

4.3.6 投影的应用:反射 160

4.4 两个向量的叉积 161

4.4.1 叉积的几何解释 162

4.4.2 求平面的法向量 163

4.5 主要几何对象的表示 164

4.5.1 坐标系和坐标框架 165

4.5.2 点的仿射组合 168

4.5.3 两个点的线性插值 170

4.5.4 艺术和动画的“插值” 171

4.5.5 概述:二次插值、立方插值和贝济埃曲线 173

4.5.6 表示线和平面 174

4.6 求两条线段的交点 182

直线相交的应用:过三点的圆 184

4.7 直线和平面的交点;裁剪 186

4.8 多边形相交问题 188

4.8.1 处理凸多边形和多面体 189

4.8.2 射线与凸多边形的交点和裁剪问题 190

4.8.3 Cyrus-Beck裁剪算法 194

4.8.4 任意多边形的裁剪 196

4.9 小结 198

4.8.5 更高级的裁剪问题 198

案例分析4.1 插值动画 199

4.10 案例分析 199

案例分析4.2 大量的圆 200

案例分析4.3 点Q是否在凸多边形P内部 201

案例分析4.4 密室反射(2D射线跟踪) 202

案例分析4.6 用凸多边形裁剪多边形:Sutherland-Hodgman裁剪 203

案例分析4.5 Cyrus-Beck裁剪 203

案例分析4.7 用多边形裁剪多边形:Weiler-Atherton裁剪 206

案例分析4.8 多边形的布尔操作 208

4.11 进一步阅读 210

第5章 对象的变换 211

5.2 变换导论 212

5.1 简介 212

5.2.1 变换点和对象 215

5.2.2 仿射变换 217

5.2.3 初等2D仿射变换的几何效果 218

5.2.4 仿射变换的逆转 223

5.2.5 组合仿射变换 224

5.2.6 组合2D变换的例子 226

5.2.7 仿射变换的一些有用特征 230

5.3 3D仿射变换 235

5.3.1 初等3D变换 236

5.3.3 组合旋转 240

5.3.2 组合3D仿射变换 240

5.3.4 3D仿射变换特征小结 245

5.4 改变坐标系 246

5.5 在程序中使用仿射变换 249

保存CT以备用 256

5.6 使用OpenGL绘制3D场景 260

5.6.1 观察过程和图形流水线综述 261

5.6.2 一些OpenGL建模和视角工具 264

5.6.3 用OpenGL绘制基本形状 267

5.6.4 从文件中读取场景 275

5.7 小结 279

案例分析5.3 分解2D仿射变换 280

案例分析5.2 使用多个旋转绘制图5.39中的星星 280

5.8 案例分析 280

案例分析5.1 用Canvas中的CT进行自行变换 280

案例分析5.4 通用3D错切 284

案例分析5.5 绕某条轴旋转:构造方法 286

案例分析5.6 分解3D仿射变换 287

5.9 进一步阅读 289

案例分析5.7 用SDL绘制3D场景 289

6.1 简介 290

第6章 使用多边形网格为各种形状建模 290

6.2 使用多边形网格实体建模简介 291

6.2.1 定义多边形网格 292

6.2.2 计算法向量 294

6.2.3 网格的性质 296

6.2.5 在程序中使用网格 298

6.2.4 为非实体物体建立网格模型 298

6.3 多面体 301

6.3.1 棱柱和对角柱 303

6.3.2 柏拉图立体 304

6.3.3 其余常见的多面体 309

6.4.1 生成棱柱 312

6.4 推挤型形状 312

6.4.2 推挤棱柱数组:“堆砌工作” 313

6.4.3 有“扭曲”的推挤 315

6.4.4 建立分段推挤形状:管状物体和蛇形物体 316

6.4.5 “离散地”延伸旋转面 321

6.5.1 表面的表示方法 323

6.5 平滑物体的网格近似 323

6.5.2 表面的法向量 325

6.5.3 仿射变换的作用 326

6.5.4 三种“标准”形状:球面、圆柱面和圆锥面 327

6.5.5 为曲面建立多边形网格 331

6.5.6 直纹面 333

6.5.7 旋转面 338

6.5.8 二次曲面 340

6.5.9 超二次曲面 344

6.5.11 基于双变量显式函数的表面 346

6.5.10 基于三维曲线的管状物体 346

6.6 小结 347

案例分析6.1 存储在文件中的网格 348

6.7 案例分析 348

案例分析6.2 Newell方法的推导 349

案例分析6.3 棱柱 351

案例分析6.4 棱柱组和推挤四边形带 352

案例分析6.5 基于参数曲线的管状物体和蛇形物体 353

案例分析6.8 拱形屋顶 354

案例分析6.7 关于边列表和线框模型 354

案例分析6.6 建立离散旋转面 354

案例分析6.11 二次曲面的代数表达式 355

案例分析6.10 关于阿基米德立体 355

案例分析6.9 关于柏拉图立体 355

案例分析6.13 绘制平滑参数表面 357

案例分析6.12 超二次曲面 357

案例分析6.14 锥化、扭曲、弯曲和挤压 358

6.8 进一步阅读 359

7.1 简介 360

第7章 三维视图 360

7.2 再次研究照相机 361

7.2.2 照相机的定位和定向 362

7.2.1 设置视角范围 362

7.3 在程序中建立照相机 368

移动照相机 370

7.4 三维物体的透视投影 373

7.4.1 点的透视投影 374

7.4.2 直线的透视投影 377

7.4.3 把透视法结合到图形管道中 380

7.4.4 对视角范围进行面裁剪 387

7.5 生成立体视图 393

7.6 投影的分类 395

7.6.1 一点透视,两点透视和三点透视 396

7.6.2 平行投影 400

7.7 小结 406

案例分析7.1 在场景中移动照相机 407

7.8 案例分析 407

案例分析7.5 去掉背面以提高效率 408

案例分析7.4 自己产生视图(假定没有OpenGL可以使用) 408

案例分析7.2 立体视图 408

案例分析7.3 生成平行投影 408

7.9 进一步阅读 410

8.1 简介 411

第8章 渲染表面获得视觉真实感 411

8.2 明暗处理模型介绍 415

8.2.2 计算漫反射分量 416

8.2.1 计算反射光的几何要素 416

8.2.3 镜面反射 418

8.2.4 环境光的作用 421

8.2.5 光分量的结合 422

8.2.6 添加颜色 423

8.2.7 明暗处理和图形管道 425

8.2.8 在OpenGL中使用光源 426

8.2.9 在OpenGL中使用材质属性 431

8.3 平面明暗处理方式和平滑明暗处理方式 432

8.2.10 对SDL指定的场景进行明暗处理 432

8.3.1 平面明暗处理 433

8.3.2 平滑明暗处理 434

深度缓冲区方法 438

8.4 去除隐藏面 438

8.5 给面添加纹理 441

8.5.1 把纹理映射到平表面上 444

8.5.2 渲染纹理 446

8.5.3 纹理改变了什么 453

8.5.4 使用OpenGL获得的纹理示例 455

8.5.5 向曲面上环绕纹理 460

8.5.6 反射映射 464

8.6 为物体添加阴影 467

8.6.1 作为纹理的阴影 468

8.6.2 利用阴影缓冲区生成阴影 469

8.7 小结 471

案例分析8.2 自己实现图形管道 472

案例分析8.1 使用OpenGL生成有阴影的物体 472

8.8 案例分析 472

案例分析8.5 应用可编程3D纹理 473

案例分析8.4 渲染纹理 473

案例分析8.3 添加多边形填充和深度缓冲区去除隐藏面 473

8.9 进一步阅读 474

案例分析8.7 扩展SDL使其包括纹理生成 474

案例分析8.6 绘制阴影 474

第9章 通向无限之路 475

9.2 分形与自相似性 476

9.1 简介 476

9.2.1 曲线的连续细化 477

9.2.2 绘制Koch曲线和Koch雪花 478

9.2.3 分形维数 480

9.3 字符串产生式和PEANO曲线 481

9.3.1 在程序中递归生成字符串并绘图 483

9.3.2 添加分支 486

9.4 拼接平面 489

9.4.1 单面拼接 490

9.4.2 双面拼接 492

9.4.4 “爬虫” 494

9.4.3 绘制拼接 494

9.5.1 拷贝器试验 497

9.5 通过迭代函数系统生成图像 497

9.5.2 拷贝过程的一些基本理论 499

9.5.3 绘制第k次迭代结果 500

9.5.4 混沌游戏 501

9.5.5 计算IFS;分形图像压缩 504

9.6 MANDELBROT集 507

9.6.1 Mandelbrot集和迭代函数系统 508

9.6.2 定义Mandelbrot集 511

9.6.3 计算点c是否在Mandelbrot集内 513

9.6.4 绘制Mandelbrot集 514

9.6.5 Mandelbrot集的几点性质 515

9.7.2 绘制充满Julia集 516

9.7.1 充满Julia集Kc 516

9.7 JULIA集 516

9.7.3 固定点和吸引盆的几点性质 517

9.7.4 Julia集Jc 519

9.8 随机分形 521

9.8.1 线段的分形化 522

9.8.2 控制分形曲线的频谱密度 523

9.9 小结 525

案例分析9.1 绘制字符串产生式 526

9.10 案例分析 526

案例分析9.2 绘制雪花和爬虫 527

案例分析9.4 绘制Mandelbrot集中的轨道 529

案例分析9.3 混沌游戏 529

案例分析9.7 非周期性拼接;Penrose拼板 530

案例分析9.6 生成Julia集的图像 530

案例分析9.5 生成Mandelbrot集的图像 530

案例分析9.8 分形化曲线 532

9.11 进一步阅读 533

案例分析9.9 为分形山建模 533

10.1 简介 534

第10章 光栅显示工具 534

10.2.1 对像素映射的操作 536

10.2 处理像素映射 536

10.2.2 像素映射的有用数据类型 537

10.2.3 图像的缩放和旋转 543

10.3 合并像素映射 546

10.3.1 读-修改-写循环 547

10.3.2 Alpha通道和图像融合 548

10.3.3 像素的逻辑合并 552

10.3.4 BitBLT操作 556

10.4 自己实现直线绘制:Bresenham算法 557

Bresenham直线绘制算法 558

10.5 定义和填充像素区域 563

10.5.2 像素定义的区域 564

10.5.1 定义区域范围 564

10.5.3 一种递归洪水填充算法 565

10.5.4 用图案填充区域 566

10.5.5 利用一致性:基于像素串的区域填充 568

10.6 处理符号定义的区域 569

10.6.1 矩形定义的区域 570

10.6.2 路径定义的区域 571

10.7 填充多边形定义的区域 573

10.7.1 边缘上的哪些像素属于多边形 574

10.7.2 改进算法性能 576

10.8 失真;反失真技术 580

10.8.1 反失真技术 581

10.8.2 纹理的反失真 586

10.8.3 使用OpenGL反失真 588

10.9 生成更多的明暗效果和色彩 590

10.9.1 顺序抖动 591

10.9.2 误差扩散 595

10.10 小结 597

案例分析10.3 基于像素串的区域填充 598

案例分析10.2 用OpenGL融合两幅图像 598

10.11 案例分析 598

案例分析10.1 读取和显示BMP图像文件 598

案例分析10.6 填充“水平凸”多边形 599

案例分析10.5 shape的链码 599

案例分析10.4 处理shape数据结构 599

10.12 进一步阅读 600

案例分析10.8 误差扩散 600

案例分析10.7 一般多边形填充 600

第11章 曲线与曲面设计 601

11.1.1 轨迹参数曲线 602

11.1 简介 602

11.1.2 运动的平滑度 603

11.2 用多项式表示曲线 606

11.3 关于交互式曲线设计 611

de Casteljau算法 613

11.4 用贝济埃曲线进行曲线设计 613

11.5 贝济埃曲线的性质 618

11.6.1 局部控制问题 623

11.6 寻找更好的混合函数 623

11.6.2 混合函数集的期望性质表 624

11.6.3 分段多项式曲线和样条 626

11.6.4 根据g(t)建立一组混合函数 627

11.6.5 样条曲线和基函数 630

11.7 B样条基函数 631

11.7.1 B样条函数定义 632

11.7.2 在结点向量中使用多重结点 636

11.7.3 开放B样条曲线:标准结点向量 637

11.8 B样条曲线设计的有用性质 640

使用多重控制点 641

11.9 有理样条和NURBS曲线 642

11.10 插值简述 646

11.10.1 用分段三次多项式插值 647

11.10.2 Hermite插值 648

11.10.3 自然三次样条 651

11.10.4 三次插值中计算斜率 653

11.10.5 交互指定切向量 656

11.11.2 基于B样条的旋转面 657

11.11.1 基于B样条的直纹面 657

11.11 曲面建模 657

11.11.3 贝济埃表面碎片 659

11.11.4 贝济埃碎片的拼接 660

11.11.5 B样条碎片 662

11.11.6 NURBS曲面 663

11.12 小结 664

案例分析11.1 几种有趣的参数曲线 666

11.13 案例分析 666

案例分析11.2 “椭圆台球桌” 667

案例分析11.5 建立样条曲线编辑器 669

案例分析11.4 一种二次样条曲线生成法 669

案例分析11.3 贝济埃曲线 669

案例分析11.6 用B样条插值控制点 670

案例分析11.8 古老的茶壶 671

案例分析11.7 用三次多项式插值 671

案例分析11.10 绘制NURBS碎片 673

案例分析11.9 投影变换不变性 673

11.14 进一步阅读 675

12.1 简介 676

第12章 色彩理论 676

12.2.1 主导波长 679

12.2 描述颜色 679

12.2.2 色匹配 680

12.3 国际照明协会标准 682

12.3.1 构造CIE表 684

12.3.2 使用CIE色度表 685

12.3.3 色域 686

12.4.1 RGB和CMY颜色空间 687

12.4 颜色空间 687

12.4.2 加色和减色系统 688

12.4.3 HLS颜色模型 689

12.5 颜色量化 692

12.5.1 均衡量化 693

12.5.3 中线切割算法 695

12.5.2 流行算法 695

12.5.4 八叉树量化 696

12.6 小结 698

案例分析12.6 中线切割颜色量化 699

案例分析12.5 流行颜色量化 699

12.7 案例分析 699

案例分析12.1 画CIE图 699

案例分析12.2 画RGB空间 699

案例分析12.3 HSV到RGB的转变 699

案例分析12.4 均匀颜色量化 699

案例分析12.7 八叉树颜色量化 700

12.8 进一步阅读 701

第13章 隐面的消除 702

13.1 简介 703

13.1.1 对象精度与图像精度方法的比较 704

13.1.2 多边形网格的数据描述 705

13.2 再次研究深度缓存算法 707

13.3 列表优先HSR算法 708

13.3.1 粗心画家算法 709

13.3.2 使用二叉空间分割(BSP)树的HSR 710

13.3.3 深度排序算法 714

13.4 扫描线HSR方法 716

13.5.1 象限细分 719

13.5 区域的细分方法 719

13.5.2 简单区域的其他定义 722

13.6 关于隐线消除法 724

edgeTest()中的几何测试 726

13.7 曲面的HSR方法 728

13.8 小结 730

案例分析13.1 画家算法测试 731

13.9 案例分析 731

案例分析13.3 使用BSP树消除隐面 732

案例分析13.2 测试和分割 732

案例分析13.4 使用深度排序法解决HSR问题 733

案例分析13.7 HLR的边堆栈算法 734

案例分析13.6 使用WARNOCK算法绘制 734

案例分析13.5 采用扫描线HSR方法 734

13.10 进一步阅读 735

第14章 光线追踪法的介绍 736

14.1 简介 737

14.2 建立光线跟踪法的几何学 738

14.3 光线跟踪法过程概述 740

14.4 光线与对象的交点 741

14.4.2 光线与通用球体相交 743

14.4.1 光线与通用平面的相交 743

14.4.3 光线与变换后的对象相交 744

14.5 编制光线跟踪器的应用程序 746

14.5.1 计算光线—球体相交的例程 752

14.5.2 用于发光球体场景的完整的光线跟踪器 754

14.6.1 与正方形相交 755

14.6 光线与其他几种基本形状的相交 755

14.6.2 与锥形柱体相交 756

14.6.3 与立方体(或任何凸多面体)相交 759

14.6.4 考虑更多的基本形状 766

14.7 绘制场景的明暗图 767

14.7.1 确定命中点处的法向量 768

14.7.2 根据对象的表面材料为其着色 768

14.7.3 基于物理原理的明暗处理模型:Cook-Torrance明暗处理 770

14.8 加入表面纹理 776

14.8.1 实体纹理 777

14.8.2 在表面上粘贴图像 786

14.8.3 反失真光线追踪 788

14.9 范围的使用 789

14.9.1 框形范围和球形范围 790

14.9.2 投影范围的使用 795

14.10 加阴影以增加真实感 798

14.11 反射与透明 801

14.11.1 光的折射 803

14.11.2 处理shade()中的折射问题 807

14.12 复合对象:关于对象的布尔运算 810

14.12.1 对CSG对象的光线追踪 811

14.12.2 布尔对象的数据结构 813

14.12.3 光线与布尔对象相交 816

14.12.4 构造和使用CSG对象的范围 820

14.13 小结 822

14.14 案例分析 823

案例分析14.1 放射型光线跟踪器 823

案例分析14.4 使用范围加速光线跟踪过程 824

案例分析14.3 在光线跟踪器中实现阴影处理 824

案例分析14.5 对3D纹理的光线跟踪 824

案例分析14.2 一种新型的光线跟踪器 824

案例分析14.9 反射光和折射光 825

案例分析14.8 一个用于研究折射效应的2D光线跟踪器 825

案例分析14.10 对对象的布尔组合进行光线跟踪 825

案例分析14.7 对其他基本形状的光线跟踪 825

案例分析14.6 反失真 825

14.15 进一步阅读 826

附录1 图形工具:获得OpenGL 827

A1.1 OpenGL的获取和安装 827

附录2 计算机图形学的数学研究 829

A2.1 一些关于矩阵及其运算的主要定义 829

A2.1.1 矩阵的运算 830

A2.1.2 两个矩阵相乘 831

A2.1.3 矩阵的分块 833

A2.1.4 矩阵的行列式 834

A2.1.5 矩阵的逆矩阵 835

A2.2.1 向量的正交;正交点积 837

A2.2.2 标量三重积 837

A2.2 向量及其运算的一些性质 837

A2.2.3 三重向量积以及4个向量的积 839

A2.3 复数的运算 839

A2.4 球坐标和方向余弦 842

附录3 一些有用的类以及实用例程 845

附录4 PostScript?简介 877

A4.1 关于PostScript语言 878

A4.1.1 准备事项 878

A4.1.2 PostScript是“基于堆栈的” 879

A4.1.3 一些有关堆栈的操作符:pop、dup、exch和clear 880

A4.1.4 更高级的堆栈操作符 880

A4.1.5 一些算术操作符 881

A4.2 PostScript中的图形操作符 884

A4.2.1 坐标系及其变换 884

A4.2.2 路径构造动词 885

A4.2.3 圆弧 886

A4.2.4 用作绘图动词 887

A4.2.5 坐标变换 888

A4.2.6 图形状态操作符 892

A4.3 在PostScript中绘制文本 893

A4.4 定义新的变量和过程 894

A4.4.1 定义变量 894

A4.4.2 定义过程 895

A4.4.3 使用repeat实现一种简单的迭代形式 899

A4.5 决策和迭代 901

A4.5.1 把布尔值作为参数的动词 901

A4.5.2 判断 902

A4.5.3 迭代 904

A4.6 打印值 908

A4.7 绘制灰度图 909

附录5 SDL简介 912

A5.1 SDL文法 913

A5.2 SDL中的宏 917

A5.3 扩展SDL 917