《OpenGL超级宝典》PDF下载

  • 购买积分:20 如何计算积分?
  • 作  者:(美)赖特,(美)利普恰克,(美)黑内尔著
  • 出 版 社:北京市:人民邮电出版社
  • 出版年份:2010
  • ISBN:9787115235848
  • 页数:718 页
图书介绍:本书是OpenGL编程指南,全书分3个部分。第一部分介绍经典OpenGL绘图的所有基础知识。第二部分着重介绍OpenGL的一些高级功能以及OpenGL 2.1的新特性。第三部分分别介绍了不同操作系统平台上的OpenGL功能特性和编程细节。

第一部分 “旧约”——经典属性第1章 3D图形和OpenGL的介绍 2

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

1.1.1 进入电子时代 2

1.1.2 走向3D 3

1.2 3D效果初探 5

1.2.1 透视(视角) 5

1.2.2 颜色和着色 6

1.2.3 光照和阴影 6

1.2.4 纹理贴图 7

1.2.5 雾 7

1.2.6 混和和透明 8

1.2.7 抗锯齿 8

1.3 3D图形的常见用途 9

1.3.1 实时3D 9

1.3.2 非实时3D 10

1.3.3 着色器 11

1.4 3D编程的基本原则 12

1.4.1 立即模式和保持模式 12

1.4.2 坐标系统 12

1.4.3 投影:从3D到2D 15

1.5 总结 17

第2章 使用OpenGL 18

2.1 什么是OpenGL 18

2.1.1 标准的演化 19

2.1.2 API战争 20

2.1.3 OpenGL的未来 20

2.2 OpenGL的工作原理 21

2.2.1 通用实现 21

2.2.2 硬件实现 22

2.2.3 管线 23

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

2.3.1 标准函数库和头文件 24

2.3.2 头文件自定义 24

2.4 API特定细节 25

2.4.1 数据类型 26

2.4.2 函数名约定 27

2.5 平台独立性 27

2.5.1 使用GLUT 28

2.5.2 第一个程序 28

2.5.3 用OpenGL绘制形状 32

2.6 使用OpenGL和GLUT生成动画 38

2.7 OpenGL状态机 41

2.8 OpenGL错误 42

2.9 确认版本 43

2.10 使用glHint获取线索 43

2.11 使用扩展 44

2.11.1 检查扩展 44

2.11.2 这是谁的扩展 45

2.12 总结 45

第3章 空间绘图:几何图元和缓冲区 46

3.1 在3D中绘制点 46

3.2 设置3D画布 47

3.3 3D空间中的点:顶点 48

3.4 绘制图形 49

3.4.1 画点 49

3.4.2 第一个例子 50

3.5 设置点的大小 52

3.6 在3D空间中画直线 54

3.6.1 线带和线环 55

3.6.2 用直线构成近似曲线 56

3.6.3 设置直线的宽度 57

3.6.4 直线点画 58

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

3.7.1 三角形:第一种多边形 60

3.7.2 环绕 61

3.7.3 三角形带 62

3.7.4 三角形扇 62

3.8 创建实心物体 63

3.8.1 设置多边形的颜色 65

3.8.2 隐藏表面消除 65

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

3.8.4 多边形模式 68

3.9 其他图元 69

3.9.1 四条边的多边形:四边形 69

3.9.2 通用多边形 70

3.9.3 填充多边形,重新讨论点画 70

3.9.4 多边形的创建规则 73

3.9.5 细分和边界 74

3.10 其他缓冲区技巧 76

3.10.1 使用缓冲区目标 76

3.10.2 操纵深度缓冲区 77

3.10.3 用剪刀进行裁剪 77

3.10.4 使用模板缓冲区 78

3.10.5 创建模板图案 80

3.11 总结 82

第4章 几何变换:管线 83

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

4.2 理解变换 84

4.2.1 视觉坐标 84

4.2.2 视图变换 85

4.2.3 模型变换 85

4.2.4 模型视图对偶性 85

4.2.5 投影变换 86

4.2.6 视口变换 87

4.3 矩阵:3D图形的数学基础 87

4.3.1 什么是矩阵 88

4.3.2 变换管线 88

4.3.3 模型视图矩阵 89

4.3.4 单位矩阵 91

4.3.5 矩阵堆栈 93

4.3.6 一个原子例子 94

4.4 使用投影 96

4.4.1 正投影 96

4.4.2 透视投影 97

4.4.3 一个远处缩小的例子 99

4.5 高级矩阵操作 101

4.5.1 加载矩阵 102

4.5.2 自己执行变换 103

4.5.3 变换的叠加 105

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

4.6.1 角色帧 106

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

4.6.3 照相机管理 107

4.6.4 综合应用 108

4.7 总结 112

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

5.1 什么是颜色 113

5.1.1 光的波动性 114

5.1.2 光的粒子性 114

5.1.3 人眼作为光子检测器 115

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

5.2 PC颜色硬件 116

5.3 PC显示模式 117

5.3.1 屏幕分辨率 117

5.3.2 颜色深度 118

5.4 在OpenGL中使用颜色 118

5.4.1 颜色立方体 118

5.4.2 设置绘图颜色 119

5.4.3 着色 120

5.4.4 设置着色模型 121

5.5 现实世界的颜色 122

5.5.1 环境光 123

5.5.2 散射光 123

5.5.3 镜面光 124

5.5.4 综合考虑 124

5.6 现实世界的材料 124

5.6.1 材料属性 125

5.6.2 向材料添加光照 125

5.6.3 计算环境光效果 125

5.6.4 散射和镜面光效果 126

5.7 向场景添加光照 126

5.7.1 启用光照 126

5.7.2 设置宇宙背景发射光 127

5.7.3 设置材料属性 127

5.8 使用光源 129

5.8.1 哪种方式最合适 129

5.8.2 表面法线 130

5.8.3 指定法线 130

5.8.4 单位法线 132

5.8.5 寻找法线 132

5.8.6 设置光源 133

5.8.7 设置材料属性 135

5.8.8 指定多边形 135

5.9 光照效果 136

5.9.1 镜面亮点 136

5.9.2 镜面光 137

5.9.3 镜面反射 137

5.9.4 镜面指数 138

5.9.5 法线均衡 139

5.10 综合讨论 140

5.10.1 创建聚光灯 141

5.10.2 绘制聚光灯 142

5.11 阴影 145

5.11.1 什么是阴影 146

5.11.2 实现压平的代码 147

5.11.3 一个阴影例子 147

5.11.4 重新回顾球体世界 149

5.12 总结 150

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

6.1 混合 151

6.1.1 组合颜色 151

6.1.2 修改混合方程式 154

6.1.3 抗锯齿 154

6.1.4 多重采样 157

6.2 应用雾 158

6.2.1 雾方程式 159

6.2.2 雾坐标 160

6.3 累积缓冲区 161

6.4 其他颜色操作 163

6.4.1 颜色掩码 163

6.4.2 颜色逻辑操作 163

6.4.3 alpha测试 163

6.4.4 抖动 164

6.5 总结 164

第7章 OpenGL中的图像 165

7.1 位图 165

7.1.1 一个位图例子 166

7.1.2 设置光栅位置 168

7.2 像素包装 169

7.3 像素图 170

7.3.1 经过包装的像素格式 171

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

7.3.3 移动像素 174

7.3.4 保存像素 175

7.4 像素的更多乐趣 177

7.4.1 像素缩放 181

7.4.2 像素转移 183

7.4.3 像素映射 185

7.5 图像“子集”和管线 186

7.5.1 颜色矩阵 190

7.5.2 颜色查找 190

7.5.3 代理 192

7.5.4 其他操作 192

7.5.5 卷积 193

7.5.6 最小最大值操作 198

7.6 总结 198

第8章 纹理贴图:基础知识 199

8.1 加载纹理 200

8.1.1 使用颜色缓冲区 202

8.1.2 更新纹理 202

8.1.3 将纹理贴图到几何图形 203

8.1.4 纹理矩阵 205

8.2 一个简单的2D例子 205

8.3 纹理环境 208

8.4 纹理参数 209

8.4.1 基本过滤 209

8.4.2 纹理环绕 211

8.4.3 带纹理的卡通 211

8.4.4 Mip贴图 214

8.5 纹理对象 217

8.6 总结 223

第9章 纹理贴图:高级知识 224

9.1 辅助颜色 224

9.2 各向异性过滤 226

9.3 纹理压缩 227

9.3.1 压缩纹理 228

9.3.2 加载压缩纹理 229

9.4 纹理坐标生成 230

9.4.1 物体线性贴图 232

9.4.2 视觉线性贴图 233

9.4.3 球体贴图 234

9.4.4 立方体贴图 234

9.5 多重纹理 237

9.5.1 多重纹理坐标 238

9.5.2 一个多重纹理例子 239

9.6 纹理组合器 242

9.7 点块纹理 244

9.7.1 使用点 244

9.7.2 纹理应用 245

9.7.3 点参数 245

9.8 总结 246

第10章 曲线和表面 247

10.1 内部支持的表面 247

10.1.1 设置二次方程状态 248

10.1.2 绘制二次方程图形 249

10.1.3 用二次方程进行建模 251

10.2 Bézier曲线和表面 253

10.2.1 参数方程表示形式 253

10.2.2 求值器(evaluator) 255

10.3 NURBS 262

10.3.1 从Bézier到B样条 262

10.3.2 结点 263

10.3.3 创建NURBS表面 263

10.3.4 NURBS属性 264

10.3.5 定义表面 264

10.3.6 修剪 265

10.3.7 NURBS表面 267

10.4 分格化(tessellation) 267

10.4.1 分格器(tessellator) 267

10.4.2 分格器回调函数 268

10.4.3 指定顶点数据 269

10.4.4 综合应用 269

10.5 总结 273

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

11.1 显示列表 275

11.1.1 批处理 276

11.1.2 预批处理 277

11.1.3 使用显示列表的一些注意事项 278

11.1.4 转换到显示列表 278

11.2 顶点数组 279

11.2.1 加载几何图形 281

11.2.2 启用数组 282

11.2.3 数据在哪里 282

11.2.4 用数据绘图 283

11.2.5 索引顶点数组 284

11.3 顶点缓冲区对象 293

11.3.1 管理和使用缓冲区对象 294

11.3.2 回到Thunderbird 295

11.4 总结 297

第12章 交互式图形 298

12.1 选择 298

12.1.1 为图元命名 299

12.1.2 在选择模式下工作 300

12.1.3 选择缓冲区 301

12.1.4 挑选 302

12.1.5 层次式挑选 304

12.2 反馈 307

12.2.1 反馈缓冲区 307

12.2.2 反馈数据 308

12.2.3 用户定义标记 308

12.3 一个反馈例子 309

12.3.1 对物体加上标签以便反馈 309

12.3.2 步骤1:选择物体 311

12.3.3 步骤2:从物体获取反馈信息 312

12.4 总结 314

第13章 遮挡查询:消除不必要的工作 315

13.1 遮挡查询之前的世界 315

13.2 边框 317

13.3 对查询对象进行查询 321

13.4 最佳实践 322

13.5 总结 323

第14章 深度纹理和阴影 324

14.1 作为光源 325

14.1.1 使场景正好占据整个窗口 325

14.1.2 去掉不必要的东西 326

14.2 一种新类型的纹理 326

14.3 首先绘制阴影 327

14.4 然后是光照 328

14.4.1 投影阴影贴图:“为什么” 328

14.4.2 投影阴影贴图:“怎么做” 329

14.4.3 阴影比较 330

14.5 只用两个就够了 333

14.6 关于多边形偏移 334

14.7 总结 334

第二部分 “新约”——新的发展第15章 可编程管线:这已不是旧式的OpenGL 336

15.1 旧的被淘汰 336

15.1.1 固定的顶点处理 337

15.1.2 固定的片断处理 339

15.2 新的占主导 339

15.2.1 可编程顶点着色器 340

15.2.2 固定功能胶水 341

15.2.3 可编程片断着色器 342

15.3 初窥OpenGL着色语言 343

15.4 管理高层着色器 344

15.4.1 着色器对象 344

15.4.2 程序对象 345

15.5 变量 347

15.5.1 基本类型 347

15.5.2 结构 348

15.5.3 数组 349

15.5.4 限定符 349

15.5.5 内置的变量 350

15.6 表达式 351

15.6.1 操作符 351

15.6.2 数组访问 352

15.6.3 构造函数 352

15.6.4 成分选择 353

15.7 控制流 353

15.7.1 循环 354

15.7.2 if/else 354

15.7.3 discard 354

15.7.4 函数 354

15.8 总结 356

第16章 顶点着色:自行转换、光照和Texgen 357

16.1 初次试验 357

16.2 散射光照 358

16.3 镜面光照 359

16.4 改善镜面光照 360

16.5 基于顶点的雾 362

16.6 基于顶点的点大小 364

16.7 自定义的顶点变换 365

16.8 顶点混合 366

16.9 总结 367

第17章 片断着色器:增强像素处理的威力 368

17.1 颜色转换 368

17.1.1 灰度 368

17.1.2 调棕色 369

17.1.3 反色 370

17.1.4 热信号 370

17.1.5 基于片断的雾 371

17.2 图像处理 372

17.2.1 模糊 372

17.2.2 锐化 373

17.2.3 膨胀和侵蚀 374

17.2.4 边缘检测 375

17.3 光照 376

17.3.1 散射光照 377

17.3.2 多重镜面光照 378

17.4 过程纹理贴图 379

17.4.1 棋盘纹理 380

17.4.2 沙滩球纹理 382

17.4.3 玩具球纹理 384

17.5 总结 386

第18章 高级缓冲区 387

18.1 像素缓冲区对象 387

18.1.1 如何使用PBO 388

18.1.2 PBO的优点 388

18.1.3 实际使用PBO 389

18.1.4 可以使用PBQ的命令 391

18.2 帧缓冲区对象 392

18.2.1 如何使用FBO 392

18.2.2 离屏渲染 395

18.2.3 渲染到纹理 396

18.2.4 多个渲染目标 398

18.3 浮点纹理 400

18.3.1 高动态范围 400

18.3.2 OpenEXR文件格式 401

18.3.3 调和映射(tone mapping) 403

18.4 更白、更亮 405

18.4.1 绘制场景 405

18.4.2 亮度渲染 407

18.4.3 借助于高斯模糊 407

18.4.4 把各部分相加 408

18.4.5 再次使用PBO 409

18.5 总结 409

第三部分 “新约外传”——扩展应用第19章 Wiggle:Windows上的OpenGL 412

19.1 Windows上的OpenGL实现 412

19.1.1 泛型OpenGL 413

19.1.2 可安装客户驱动程序 413

19.1.3 Mini客户驱动程序 413

19.1.4 Mini驱动程序 414

19.1.5 Vista上的OpenGL 414

19.1.6 扩展OpenGL 414

19.2 基本的窗口渲染 415

19.2.1 GDI设备环境 415

19.2.2 像素格式 416

19.2.3 OpenGL渲染环境 421

19.3 综合应用 421

19.3.1 创建窗口 422

19.3.2 使用OpenGL渲染环境 425

19.3.3 其他Windows消息 427

19.4 OpenGL和Windows字体 428

19.4.1 3D字体和文本 429

19.4.2 2D字体和文本 430

19.5 全屏渲染 432

19.5.1 创建一个无边框窗口 432

19.5.2 创建一个全屏窗口 433

19.6 多线程渲染 435

19.7 OpenGL和WGL扩展 436

19.7.1 简单扩展 436

19.7.2 使用新入口 437

19.7.3 自动魔法扩展 437

19.7.4 WGL扩展 438

19.8 总结 441

第20章 Mac OSX上的OpenGL 442

20 1 GLUT 442

20.1.1 创建一个GLUT项目 443

20.1.2 应用程序框架 443

20.1.3 Ditching Cocoa 444

20.2 使用Carbon的OpenGL 444

20.2.1 为OpenGL进行设置 444

20.2.2 设置像素格式 446

20.2.3 位图字体 449

20.3 使用Cocoa的OpenGL 451

20.3.1 创建一个Cocoa程序 451

20.3.2 综合运用 452

20.4 全屏渲染 455

20.4.1 显示管理 455

20.4.2 AGL全屏支持 456

20.5 总结 458

第21章 Linux上的OpenGL 459

21.1 基础知识 459

21.2 安装 460

21.2.1 安装Mesa 460

21.2.2 安装硬件驱动程序 461

21.2 3 其他安装细节 461

21.2.4 安装GLUT 461

21.2.5 生成OpenGL应用程序 461

21.3 GLUT 462

21.4 GLX——处理X Window接口 462

21.4.1 显示和X 463

21.4 2 配置管理和画面 463

21.4.3 窗口和渲染表面 466

21.4.4 环境管理 467

21.4.5 同步 468

21.4.6 GLX字符串 469

21.4.7 其他关于GLX的内容 469

21.5 综合运用 470

21.6 总结 473

第22章 OpenGL ES:嵌入式OpenGL 474

22.1 精简的OpenGL 474

22.1.1 ES指什么 474

22.1.2 历史概述 475

22.2 版本选择 476

22.2.1 ES 1.0 476

22.2.2 ES 1.1 478

22.2.3 ES 2.0 481

22.2.4 ES SC 485

22.3 ES环境 486

22.3.1 应用程序设计的注意事项 486

22.3.2 有限环境的处理 487

22.3.3 定点数学 487

22.4 EGL:新的窗口环境 488

22.4.1 EGL显示 489

22.4.2 创建一个窗口 489

22.4.3 环境管理 492

22.4.4 呈现缓冲区和渲染同步 493

22.4.5 更多EGL相关内容 493

22.5 处理嵌入式环境 494

22.5.1 流行操作系统 494

22.5.2 嵌入式硬件 495

22.5.3 供应商特定扩展 495

22.5.4 个人玩家 495

22.6 实施OpenGL ES 495

22.6.1 设置环境 495

22.6.2 设置OpenGL ES状态 497

22.6.3 渲染 497

22.6.4 清除工作 498

22.7 总结 498

附录A 更多阅读建议 499

附录B 词汇表 501

附录C API参考 504