《OpenGL超级宝典 第3版》PDF下载

  • 购买积分:20 如何计算积分?
  • 作  者:(美)Richard S. Wright,Jr.,(美)Benjamin Lipchak著;徐波译
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2005
  • ISBN:711513720X
  • 页数:735 页
图书介绍:本书是内容广泛的OpenGL编程指南,涵盖了使用新版本的OpenGL进行编程所需要的所有知识。

第一部分 经典OpenGL 3

第1章 3D图形和OpenGL简介 3

1.1 计算机图形的简单历史回顾 3

1.1.1 进入CRT 3

目录 3

1.1.2 走向3D 4

1.2 3D效果初探 6

1.2.1 透视(视角) 6

1.2.2 颜色和着色 6

1.2.3 光照和阴影 7

1.2.4 纹理贴图 7

1.2.5 雾 7

1.2.6 混和和透明 8

1.2.7 抗锯齿 8

1.3.1 实时3D 9

1.3 3D图形的常见用途 9

1.3.2 非实时3D 10

1.4 3D编程的基本原则 11

1.4.1 立即模式和保持模式(场景图) 11

1.4.2 坐标系统 11

1.4.3 投影(从3D到2D) 14

1.5 小结 16

第2章 使用OpenGL 17

2.1 什么是OpenGL 17

2.1.1 标准的演化 18

2.1.2 API战争 19

2.2 OpenGL的工作原理 22

2.2.1 泛型实现 22

2.2.2 硬件实现 23

2.3 OpenGL是API而不是编程语言 24

2.2.3 管线 24

2.4 API规范 25

2.4.1 数据类型 25

2.4.2 函数名约定 26

2.5 平台独立性 27

2.5.1 使用GLUT 27

2.5.2 设置编程环境 28

2.5.3 你的第一个程序 28

2.5.4 用OpenGL绘制形状 32

2.6 使用OpenGL和GLUT生成动画 37

2.7 OpenGL状态机 40

2.8 OpenGL错误 41

2.9 确认版本 42

2.10 调用glHint获得线索 42

2.11 使用扩展 42

2.11.2 这是谁的扩展 43

2.11.1 检查扩展 43

2.11.3 在Windows中使用OpenGL 1.1以后的版本 44

2.12 小结 44

2.13 参考 45

第3章 在空间中绘图(几何图元和缓冲区) 55

3.1 在3D 中绘制点 55

3.2 设置3D画布 56

3.3 3D空间中的点——顶点 57

3.4 绘制图形 58

3.5 设置点的大小 60

3.6 在3D空间中画直线 62

3.6.1 线带和线环 63

3.6.2 用直线构成近似曲线 64

3.6.3 设置直线的宽度 64

3.6.4 直线点画 66

3.7.2 环绕 68

3.7.1 三角形——第一种多边形 68

3.7 在3D空间中绘制三角形 68

3.7.3 三角形带 69

3.7.4 三角形扇 69

3.8 创建实心物体 70

3.8.1 设置多边形颜色 72

3.8.2 隐藏表面消除 72

3.8.3 剔除:隐藏表面,提高性能 73

3.8.4 多边形模式 75

3.9 其他图元 75

3.9.1 四条边的多边形——四边形 75

3.9.2 通用多边形 76

3.9.3 填充多边形,回顾点画 76

3.9.4 多边形创建规则 79

3.9.5 细分和边界 80

3.10.1 使用缓冲区目标 82

3.10 其他缓冲区技巧 82

3.10.2 操纵深度缓冲区 83

3.10.3 用剪刀进行裁剪 84

3.10.4 使用模版缓冲区 85

3.11 小结 88

3.12 参考 88

第4章 几何转换——管线 100

4.1 本章是不是枯燥的数学课 100

4.2 理解转换 101

4.2.1 视觉坐标 101

4.2.2 视图转换 102

4.2.3 模型转换 102

4.2.4 模型视图二元性 103

4.2.5 投影转换 104

4.2.6 视口转换 104

4.3.2 转换管线 105

4.3.1 什么是矩阵 105

4.3 矩阵——3D图形的数学基础 105

4.3.3 模型视图矩阵 106

4.3.4 单位矩阵 108

4.3.5 矩阵堆栈 109

4.3.6 一个原子例子 110

4.4 使用投影 112

4.4.1 投影 112

4.4.2 透视投影 113

4.4.3 一个远处缩小的例子 114

4.5 高级矩阵操作 116

4.5.1 载入矩阵 117

4.5.2 自己执行转换 118

4.5.3 把转换放在一起 120

4.6 使用照相机和角色在OpenGL中移动 121

4.6.1 角色帧 121

4.6.3 照相机管理 122

4.6.2 欧拉角:“卢克!请使用帧” 122

4.7 综合应用 123

4.8 小结 127

4.9 参考 128

第5章 颜色、材料和光照基础知识 134

5.1 什么是颜色 134

5.1.1 光的波性 134

5.1.2 光的粒子性 135

5.1.3 人眼作为光子检测器 136

5.1.4 计算机作为光子检测器 136

5.2 PC颜色硬件 137

5.3 PC显示模式 137

5.3.1 屏幕分辨率 138

5.3.2 颜色深度 138

5.4.1 颜色立方体 139

5.4 在OpenGL 中使用颜色 139

5.4.3 着色 140

5.4.2 设置绘图颜色 140

5.4.4 设置着色模型 142

5.5 现实世界的颜色 142

5.5.1 环境光 143

5.5.2 散射光 143

5.5.3 镜面光 143

5.5.4 综合考虑 143

5.6 现实世界的材料 144

5.6.1 材料属性 144

5.6.2 向材料添加光照 144

5.6.3 计算环境光效果 144

5.7 向场景添加光照 145

5.7.1 启用光照 145

5.6.4 散射和镜面光效果 145

5.7.2 设置光照模型 146

5.7.3 设置材料属性 146

5.8 使用光源 148

5.8.1 哪种方式最合适 148

5.8.2 表面法线 149

5.8.3 指定法线 149

5.8.4 单位法线 150

5.8.5 寻找法线 151

5.8.6 设置光源 152

5.8.7 设置材料属性 153

5.8.8 指定多边形 153

5.9 光照效果 154

5.9.1 镜面加亮 154

5.9.2 镜面光 154

5.9.3 镜面反射 155

5.9.4 镜面指数 156

5.9.5 法线均衡 157

5.10 综合讨论 158

5.10.1 创建亮点 158

5.10.2 绘制光点 159

5.11 阴影 162

5.11.1 什么是阴影 163

5.11.2 实现压平的代码 163

5.11.3 一个阴影例子 164

5.11.4 重新回顾球体世界 166

5.12 小结 167

5.13 参考 167

第6章 颜色和材料的更多细节 174

6.1 混合 174

6.1.1 组合颜色 174

6.1.3 抗锯齿 177

6.1.2 修改混合方程式 177

6.2 雾 181

6.3 累积缓冲区 183

6.4 其他颜色操作 185

6.4.1 颜色掩码 185

6.4.2 颜色逻辑操作 185

6.4.3 Alpha测试 186

6.4.4 抖动 186

6.5 小结 186

6.6 参考 187

第7章 OpenGL中的图像 191

7.1 位图 191

7.2 像素包装 195

7.3 像素图 196

7.3.1 经过包装的像素格式 198

7.3.2 一个颜色更丰富的例子 198

7.3.3 移动像素 200

7.3.4 保存像素 201

7.4 像素的更多乐趣 203

7.4.1 像素缩放 208

7.4.2 像素转移 208

7.4.3 像素映射 211

7.5 图像“子集” 212

7.6 小结 222

7.7 参考 223

第8章 纹理贴图基础知识 239

8.1 载入纹理 239

8.1.1 使用颜色缓冲区 242

8.1.2 更新纹理 242

8.2 将纹理贴图到几何图形 243

8.3 一个简单的2D例子 244

8.4 纹理环境 249

8.5 纹理参数 250

8.5.1 基本过滤 250

8.5.2 纹理环绕 251

8.5.3 带纹理的卡通 252

8.5.4 Mip贴图 256

8.6 纹理对象 259

8.7 小结 266

8.8 参考 266

第9章 纹理贴图高级知识 279

9.1 第二颜色 279

9.2 各向异性过滤 281

9.3 纹理压缩 282

9.3.1 压缩纹理 283

9.3.2 载入压缩纹理 284

9.4 纹理坐标生成 284

9.4.1 物体线性贴图 289

9.4.2 视觉线性贴图 290

9.4.3 球体贴图 291

9.4.4 立方体贴图 292

9.5 多重纹理 294

9.5.1 多重纹理坐标 295

9.5.2 一个多重纹理例子 295

9.6 纹理组合器 298

9.7 小结 300

9.8 参考 300

第10章 曲线和表面 306

10.1 内部支持的表面 306

10.1.1 设置二次方程状态 307

10.1.2 绘制二次方程图形 308

10.1.3 用二次方程进行建模 311

10.2 Bézier曲线和表面 312

10.2.1 参数方程表示形式 313

10.2.2 求值器 314

10.3 NURBS 321

10.3.1 从Bézier到B样条 321

10.3.2 结点 322

10.3.3 创建NURBS表面 322

10.3.4 NURBS属性 323

10.3.5 定义表面 323

10.3.6 修剪 324

10.3.7 NURBS表面 326

10.4 镶嵌 326

10.4.1 镶嵌器 327

10.4.2 镶嵌器回调函数 327

10.4.3 指定顶点数据 328

10.4.4 综合应用 328

10.6 参考 332

10.5 小结 332

11.1 模型装配101 353

第11章 这就是管线—更快的几何图形渲染 353

11.2 显示列表 363

11.2.1 批处理 363

11.2.2 预批处理 364

11.2.3 使用显示列表的一些注意事项 365

11.2.4 转换到显示列表 365

11.3 测量性能 366

11.4 顶点数组 370

11.4.1 载入几何图形 373

11.4.2 启用数组 374

1 1.4.3 数据在哪里 374

11.4.4 进行绘图 375

11.4.5 索引顶点数组 376

11.6 参考 385

11.5 小结 385

第12章 交互式图形 395

12.1 选择 395

12.1.1 为图元命名 396

12.1.2 在选择模式下工作 397

12.1.3 选择缓冲区 398

12.1.4 挑选 399

12.1.5 层次式挑选 401

12.1.6 反馈 404

12.1.7 反馈缓冲区 404

12.1.8 反馈数据 405

12.1.9 用户定义标记 405

12.2 一个反馈例子 406

12.2.1  对物体加上标签以便反馈 406

12.2.2 步骤1:选择物体 408

12.2.3 步骤2:从物体获取反馈信息 409

12.4 参考 411

12.3 小结 411

第二部分 OpenGL无处不在 417

第13章 Windows上的OpenGL Wiggle 417

13.1 Windows上的OpenGL实现 417

13.1.1 泛型OpenGL 418

13.1.2 可安装客户驱动程序(ICD) 418

13.1.3 Mini客户驱动程序(MCD) 418

13.1.4 Mini驱动程序 419

13.1.5 扩展OpenGL 419

13.2 基本的窗口渲染 420

13.2.1 GDI设备环境 420

13.2.2 像素格式 421

13.2.3 OpenGL渲染环境 426

13.3.1 创建窗口 427

13.3 综合应用 427

13.3.2 使用OpenGL渲染环境 430

13.3.3 其他Windows消息 433

13.4 Windows调色板 434

13.4.1 颜色匹配 434

13.4.2 调色板仲裁 435

13.4.3 为OpenGL创建调色板 436

13.4.4 调色板的创建和销毁 439

13.5 OpenGL和Windows字体 440

13.5.1 3D字体和文本 441

13.5.2 2D字体和文本 442

13.6 全屏渲染 444

13.6.1 创建一个无边框窗口 444

13.6.2 创建一个全屏窗口 445

13.7 多线程渲染 447

13.8.1 简单扩展 448

13.8 OpenGL和WGL扩展 448

13.8.2 使用新入口 449

13.8.3 WGL扩展 449

13.9 小结 470

13.10 参考 470

第14章 MacOS X上的OpenGL 482

14.1 基础知识 482

14.1.1 框架 482

14.1.2 使用GLUT API 483

14.2 使用AGL和CarbonAPI 483

14.2.1 像素格式 483

14.2.2 管理渲染环境 484

14.2.3 执行双缓冲渲染 485

14.2.4 你的第一个AGL程序 485

14.2.5 使用位图字体 494

14.3.1 NSOpenGL类 504

14.3 使用Cocoa API 504

14.3.2 你的第一个Cocoa程序 505

14.4 小结 512

14.5 参考 512

第15章 GLX:Linux上的OpenGL 516

15.1 基础知识 516

15.1.1 使用OpenGL和X11函数库 516

15.1.2 使用GLUT函数库 518

15.1.3 Linux上的OpenGL 518

15.1.4 OpenGL模拟:Mesa 519

15.2 X Window系统的OpenGL扩展 519

15.2.1 X Window系统基础知识 519

15.2.2 选择画面 519

15.2.3 管理OpenGL渲染环境 520

15.2.6 综合应用 521

15.2.5 双缓冲窗口 521

15.2.4 创建OpenGL窗口 521

15.3 为OpenGL创建位图字体 528

15.4 离屏渲染 537

15.4.1 使用GLX Pixmap 537

15.4.2 使用Pbuffer 541

15.5 使用Motif函数库 546

15.5.1 GLwDrawingArea和GLwMDrawingArea 546

15.5.2 回调资源 547

15.5.3 函数 548

15.5.4 综合应用 549

15.6 小结 557

15.7 参考 557

第三部分 下一代OpenGL 565

第16章 缓冲区对象 565

16.1.1 生成球状微粒云彩 566

16.1 顶点数组 566

16.1.2 启用顶点数组 567

16.1.3 使用更多的球体 568

16.2 迁移到缓冲区对象 569

16.2.1 缓冲区对象管理 570

16.2.2 用缓冲区对象进行渲染 571

16.3 把数据载入到缓冲区对象 571

16.3.1 把数据复制到缓冲区对象 571

16.3.2 直接映射缓冲区对象 572

16.4 补遗 575

16.5 小结 576

16.6 参考 576

第17章 遮挡查询 581

17.1 遮挡查询之前的世界 581

17.2 边框 584

17.3 对查询对象进行查询 587

17.5 参考 589

17.4 小结 589

第18章 深度纹理和阴影 593

18.1 作为光源 594

18.1.1 使场景正好占据整个窗口 594

18.1.2 去掉华而不实的东西 594

18.2 一种新类型的纹理 597

18.3 首先绘制阴影 597

18.4 然后是光照 598

18.4.1 投影阴影贴图:“为什么” 598

18.4.2 投影阴影贴图:“怎么做” 599

18.4.3 阴影比较 600

18.5 只用两个就够了 605

18.6 关于多边形偏移 606

18.7 小结 606

18.8 参考 607

19.1.1 固定的顶点处理 609

19.1 旧的被淘汰 609

第19章 可编程管线 609

19.1.2 固定的片断处理 611

19.2 新的占主导 612

19.2.1 可编程顶点着色器 612

19.2.2 固定功能胶水 614

19.2.3 可编程片断着色器 614

19.3 着色器扩展介绍 615

19.3.1 低层扩展 615

19.3.2 高层扩展 617

19.4 小结 618

第20章 低层着色(深入底层) 619

20.1 管理低层着色器 619

20.1.1 创建和绑定着色器 619

20.1.2 载入着色器 620

20.1.4 设置扩展 621

20.1.3 删除着色器 621

20.2.1 常用指令 622

20.2 指令集 622

20.2.2 专用于顶点的指令 623

20.2.3 专用于片断的指令 624

20.3 变量类型 624

20.3.1 临时变量 625

20.3.2 参数 625

20.3.3 属性 626

20.3.4 输出 628

20.3.5 别名 629

20.3.6 地址 629

20.4.2 输入Swizzle 630

20.4.4 输出限定 630

20.4.3 输出写入掩码 630

20.4.1 输入取负 630

20.4 输入和输出限定符 630

20.5 资源消耗和队列 631

20.5.1 解析器限制 631

20.5.2 本地限制 632

20.5.3 其他查询 633

20.6 着色器选项 633

20.6.1 位置不变性顶点选项 634

20.6.2 雾应用片段选项 634

20.6.3 精度提示片断选项 634

20.7 小结 634

20.8 参考 634

第21章 高层着色 644

21.1 管理高层着色器 644

21.1.1 着色器对象 644

21.1.2 程序对象 646

21.1.3 设置扩展 647

21.2 变量 648

21.2.1 基本类型 648

21.2.2 结构 649

21.2.3 数组 650

21.2.4 修饰符 650

21.2.5 内置的变量 650

21.3 表达式 651

21.3.1 操作符 651

21.3.2 数组访问 652

21.3.3 构造函数 652

21.3.4 成分选择 653

21.4 控制流 653

21.4.3 discard 654

21.4.4 函数 654

21.4.2 if/else 654

21.4.1 循环 654

21.5 小结 656

21.6 参考 657

第22章 顶点着色 668

22.1 初次试验 668

22.2 散射光照 670

22.3 镜面光照 672

22.4 改善镜面光照 674

22.5 基于顶点的雾 680

22.6 基于顶点的点大小 683

22.7 自定义的顶点转换 685

22.8 顶点混合 687

22.9 小结 691

23.1.1 灰度 692

23.1 颜色转换 692

第23章 片断着色器 692

23.1.2 调棕色 694

23.1.3 反色 694

23.1.4 热信号 696

23.1.5 基于片断的雾 697

23.2 图像处理 699

23.2.1 模糊 699

23.2.2 锐化 702

23.2.3 膨胀和侵蚀 703

23.2.4 边缘检测 705

23.3 光照 707

23.3.1 散射光照 707

23.3.2 多重镜面光照 710

23.4 过程纹理贴图 714

23.4.1 棋盘纹理 714

23.4.2 沙滩球纹理 718

23.4.3 玩具球纹理 722

23.5 小结 727

附录A 推荐读物 728

A.1 其他优秀的OpenGL书籍 728

A.2 3D图形书籍 728

A.3 网站 728

附录B 术语表 730

附录C OpenGLES 733

C.1 数据类型的削减 733

C.2 完全消除的特性 733

C.3 大幅度削减了的功能 734

C.3.1 纹理贴图 734

C.3.2 光栅操作 734

C.3.3 光照 735

C.4 小结 735