《Open GL编程指南(原书第7版)》对OpenGL以及OpenGL实用函数库进行了全面而又权威的介绍,素有“OpenGL红宝书”之誉。《Open GL编程指南(原书第7版)》的上一个版本覆盖了到OpenGL 2.1版的内容。本版涵盖了OpenGL 3.0和3.1的最新特性。《Open GL编程指南(原书第7版)》以清晰的语言描述了OpenGL的功能以及许多基本的计算机图形技巧,例如创建和渲染3D模型、从不同的透视角度观察物体、使用着色、光照和纹理贴图使场景更加逼真等。另外,《Open GL编程指南(原书第7版)》还深入探讨了许多高级技巧,包括纹理贴图、抗锯齿、雾和大气效果、NURBS、图像处理子集等。此外,《Open GL编程指南(原书第7版)》还对一些重要的主题进行了讨论,例如提高性能、OpenGL扩展以及跨平台技术等。《Open GL编程指南(原书第7版)》内容详实,讲解生动,图文并茂,是OpenGL程序员的绝佳编程指南。
译者序
前言
第1章 OpenGL简介 1
1.1 什么是OpenGL 1
1.2 一段简单的OpenGL代码 3
1.3 OpenGL函数的语法 4
1.4 OpenGL是一个状态机 6
1.5 OpenGL渲染管线 6
1.5.1 显示列表 7
1.5.2 求值器 7
1.5.3 基于顶点的操作 7
1.5.4 图元装配 7
1.5.5 像素操作 8
1.5.6 纹理装配 8
1.5.7 光栅化 8
1.5.8 片断操作 8
1.6 与OpenGL相关的函数库 9
1.6.1 包含文件 9
1.6.2 OpenGL实用工具库(GLUT) 10
1.7 动画 13
1.7.1 暂停刷新 14
1.7.2 动画=重绘+交换 15
1.8 OpenGL及其废弃机制 17
1.8.1 OpenGL渲染环境 17
1.8.2 访问OpenGL函数 18
第2章 状态管理和绘制几何物体 19
2.1 绘图工具箱 20
2.1.1 清除窗口 20
2.1.2 指定颜色 22
2.1.3 强制完成绘图操作 23
2.1.4 坐标系统工具箱 24
2.2 描述点、直线和多边形 25
2.2.1 什么是点、直线和多边形 25
2.2.2 指定顶点 27
2.2.3 OpenGL几何图元 27
2.3 基本状态管理 31
2.4 显示点、直线和多边形 32
2.4.1 点的细节 32
2.4.2 直线的细节 33
2.4.3 多边形的细节 36
2.5 法线向量 41
2.6 顶点数组 43
2.6.1 步骤1:启用数组 44
2.6.2 步骤2:指定数组的数据 44
2.6.3 步骤3:解引用和渲染 46
2.6.4 重启图元 51
2.6.5 实例化绘制 53
2.6.6 混合数组 54
2.7 缓冲区对象 57
2.7.1 创建缓冲区对象 57
2.7.2 激活缓冲区对象 58
2.7.3 用数据分配和初始化缓冲区对象 58
2.7.4 更新缓冲区对象的数据值 60
2.7.5 在缓冲区对象之间复制数据 62
2.7.6 清除缓冲区对象 63
2.7.7 使用缓冲区对象存储顶点数组数据 63
2.8 顶点数组对象 65
2.9 属性组 69
2.10 创建多边形表面模型的一些提示 71
第3章 视图 77
3.1 简介:用照相机打比方 78
3.1.1 一个简单的例子:绘制立方体 80
3.1.2 通用的变换函数 83
3.2 视图和模型变换 84
3.2.1 对变换进行思考 85
3.2.2 模型变换 86
3.2.3 视图变换 89
3.3 投影变换 93
3.3.1 透视投影 94
3.3.2 正投影 95
3.3.3 视景体裁剪 96
3.4 视口变换 96
3.4.1 定义视口 96
3.4.2 变换深度坐标 97
3.5 和变换相关的故障排除 98
3.6 操纵矩阵堆栈 100
3.6.1 模型视图矩阵堆栈 101
3.6.2 投影矩阵堆栈 102
3.7 其他裁剪平面 102
3.8 一些组合变换的例子 104
3.8.1 创建太阳系模型 104
3.8.2 创建机器人手臂 107
3.9 逆变换和模拟变换 109
第4章 颜色 113
4.1 颜色感知 113
4.2 计算机颜色 114
4.3 RGBA和颜色索引模式 115
4.3.1 RGBA显示模式 116
4.3.2 颜色索引模式 117
4.3.3 在RGBA和颜色索引模式中进行选择 118
4.3.4 切换显示模式 118
4.4 指定颜色和着色模型 119
4.4.1 在RGBA模式下指定颜色 119
4.4.2 在颜色索引模式下指定颜色 120
4.4.3 指定着色模型 121
第5章 光照 123
5.1 隐藏表面消除工具箱 124
5.2 现实世界和OpenGL光照 125
5.2.1 环境光、散射光、镜面光和发射光 125
5.2.2 材料颜色 126
5.2.3 光和材料的RGB值 126
5.3 一个简单的例子:渲染光照球体 127
5.4 创建光源 129
5.4.1 颜色 130
5.4.2 位置和衰减 131
5.4.3 聚光灯 132
5.4.4 多光源 133
5.4.5 控制光源的位置和方向 133
5.5 选择光照模型 138
5.5.1 全局环境光 138
5.5.2 局部的观察点或无限远的观察点 138
5.5.3 双面光照 139
5.5.4 镜面辅助颜色 139
5.5.5 启用光照 140
5.6 定义材料属性 140
5.6.1 散射和环境反射 141
5.6.2 镜面反射 141
5.6.3 发射光颜色 142
5.6.4 更改材料属性 142
5.6.5 颜色材料模式 143
5.7 和光照有关的数学知识 146
5.7.1 材料的发射光 147
5.7.2 经过缩放的全局环境光 147
5.7.3 光源的贡献 147
5.7.4 完整的光照计算公式 148
5.7.5 镜面辅助颜色 148
5.8 颜色索引模式下的光照 149
第6章 混合、抗锯齿、雾和多边形偏移 151
6.1 混合 152
6.1.1 源因子和目标因子 152
6.1.2 启用混合 154
6.1.3 使用混合方程式组合像素 154
6.1.4 混合的样例用法 156
6.1.5 一个混合的例子 157
6.1.6 使用深度缓冲区进行三维混合 159
6.2 抗锯齿 162
6.2.1 对点和直线进行抗锯齿处理 164
6.2.2 使用多重采样对几何图元进行抗锯齿处理 169
6.2.3 对多边形进行抗锯齿处理 172
6.3 雾 172
6.3.1 使用雾 173
6.3.2 雾方程式 175
6.4 点参数 181
6.5 多边形偏移 182
第7章 显示列表 185
7.1 为什么使用显示列表 185
7.2 一个使用显示列表的例子 186
7.3 显示列表的设计哲学 188
7.4 创建和执行显示列表 189
7.4.1 命名和创建显示列表 191
7.4.2 存储在显示列表里的是什么 191
7.4.3 执行显示列表 193
7.4.4 层次式显示列表 193
7.4.5 管理显示列表索引 194
7.5 执行多个显示列表 194
7.6 用显示列表管理状态变量 199
第8章 绘制像素、位图、字体和图像 202
8.1 位图和字体 203
8.1.1 当前光栅位置 204
8.1.2 绘制位图 205
8.1.3 选择位图的颜色 206
8.1.4 字体和显示列表 206
8.1.5 定义和使用一种完整的字体 207
8.2 图像 209
8.3 图像管线 215
8.3.1 像素包装和解包 216
8.3.2 控制像素存储模式 217
8.3.3 像素传输操作 219
8.3.4 像素映射 221
8.3.5 放大、缩小或翻转图像 222
8.4 读取和绘制像素矩形 224
8.5 使用缓冲区对象存取像素矩形数据 227
8.5.1 使用缓冲区对象传输像素数据 227
8.5.2 使用缓冲区对象提取像素数据 228
8.6 提高像素绘图速度的技巧 229
8.7 图像处理子集 230
8.7.1 颜色表 231
8.7.2 卷积 234
8.7.3 颜色矩阵 240
8.7.4 柱状图 241
8.7.5 最小最大值 243
第9章 纹理贴图 245
9.1 概述和示例 248
9.1.1 纹理贴图的步骤 248
9.1.2 一个示例程序 249
9.2 指定纹理 251
9.2.1 纹理代理 255
9.2.2 替换纹理图像的全部或一部分 257
9.2.3 一维纹理 259
9.2.4 三维纹理 261
9.2.5 纹理数组 264
9.2.6 压缩纹理图像 265
9.2.7 使用纹理边框 267
9.2.8 mipmap:多重细节层 267
9.3 过滤 275
9.4 纹理对象 277
9.4.1 命名纹理对象 277
9.4.2 创建和使用纹理对象 278
9.4.3 清除纹理对象 280
9.4.4 常驻纹理工作集 280
9.5 纹理函数 282
9.6 分配纹理坐标 284
9.6.1 计算正确的纹理坐标 285
9.6.2 重复和截取纹理 286
9.7 纹理坐标自动生成 289
9.7.1 创建轮廓线 289
9.7.2 球体纹理 293
9.7.3 立方图纹理 294
9.8 多重纹理 296
9.9 纹理组合器函数 299
9.10 在纹理之后应用辅助颜色 303
9.10.1 在禁用光照时使用辅助颜色 303
9.10.2 启用光照后的辅助镜面颜色 303
9.11 点块纹理 303
9.12 纹理矩阵堆栈 304
9.13 深度纹理 305
9.13.1 创建阴影图 306
9.13.2 生成纹理坐标并进行渲染 307
第10章 帧缓冲区 309
10.1 缓冲区及其用途 310
10.1.1 颜色缓冲区 311
10.1.2 清除缓冲区 312
10.1.3 选择用于读取和写入的颜色缓冲区 313
10.1.4 缓冲区的屏蔽 315
10.2 片断测试和操作 316
10.2.1 裁剪测试 316
10.2.2 alpha测试 317
10.2.3 模板测试 318
10.2.4 深度测试 322
10.2.5 遮挡查询 322
10.2.6 条件渲染 324
10.2.7 混合、抖动和逻辑操作 325
10.3 累积缓冲区 327
10.3.1 运动模糊 328
10.3.2 景深 328
10.3.3 柔和阴影 331
10.3.4 微移 331
10.4 帧缓冲区对象 332
10.4.1 渲染缓冲区 333
10.4.2 复制像素矩形 340
第11章 分格化和二次方程表面 342
11.1 多边形分格化 342
11.1.1 创建分格化对象 343
11.1.2 分格化回调函数 343
11.1.3 分格化属性 347
11.1.4 多边形定义 350
11.1.5 删除分格化对象 352
11.1.6 提高分格化性能的建议 352
11.1.7 描述GLU错误 352
11.1.8 向后兼容性 352
11.2 二次方程表面:渲染球体、圆柱体和圆盘 353
11.2.1 管理二次方程对象 354
11.2.2 控制二次方程对象的属性 354
11.2.3 二次方程图元 355
第12章 求值器和NURBS 360
12.1 前提条件 360
12.2 求值器 361
12.2.1 一维求值器 361
12.2.2 二维求值器 365
12.2.3 使用求值器进行纹理处理 369
12.3 GLU的NURBS接口 371
12.3.1 一个简单的NURBS例子 371
12.3.2 管理NURBS对象 374
12.3.3 创建NURBS曲线或表面 377
12.3.4 修剪NURBS表面 380
第13章 选择和反馈 383
13.1 选择 383
13.1.1 基本步骤 384
13.1.2 创建名字栈 384
13.1.3 点击记录 385
13.1.4 一个选择例子 386
13.1.5 挑选 389
13.1.6 编写使用选择的程序的一些建议 397
13.2 反馈 398
13.2.1 反馈数组 399
13.2.2 在反馈模式下使用标记 400
13.2.3 一个反馈例子 400
第14章 OpenGL高级技巧 404
14.1 错误处理 405
14.2 OpenGL版本 406
14.2.1 工具函数库版本 407
14.2.2 窗口系统扩展版本 407
14.3 标准的扩展 407
14.4 实现半透明效果 409
14.5 轻松实现淡出效果 409
14.6 使用后缓冲区进行物体选择 411
14.7 低开销的图像转换 411
14.8 显示层次 412
14.9 抗锯齿字符 413
14.10 绘制圆点 414
14.11 图像插值 414
14.12 制作贴花 415
14.13 使用模板缓冲区绘制填充的凹多边形 416
14.14 寻找冲突区域 416
14.15 阴影 417
14.16 隐藏直线消除 418
14.16.1 使用多边形偏移实现隐藏直线消除 418
14.16.2 使用模板缓冲区实现隐藏直线消除 419
14.17 纹理贴图的应用 419
14.18 绘制深度缓冲的图像 420
14.19 Dirichlet域 420
14.20 使用模板缓冲区实现生存游戏 421
14.21 glDrawPixels()和glCopyPixels()的其他应用 422
第15章 OpenGL着色语言 424
15.1 OpenGL图形管线和可编程着色器 424
15.1.1 顶点处理 425
15.1.2 片断处理 426
15.2 使用GLSL着色器 427
15.2.1 着色器示例 427
15.2.2 OpenGL/GLSL接口 428
15.3 OpenGL着色语言 432
15.4 使用GLSL创建着色器 433
15.4.1 程序起点 433
15.4.2 声明变量 433
15.4.3 聚合类型 434
15.5 uniform块 439
15.5.1 在着色器中指定uniform变量 440
15.5.2 访问在uniform块中声明的uniform变量 440
15.5.3 计算不变性 446
15.5.4 语句 446
15.5.5 函数 448
15.5.6 在GLSL程序中使用OpenGL状态值 449
15.6 在着色器中访问纹理图像 449
15.7 着色器预处理器 452
15.7.1 预处理器指令 452
15.7.2 宏定义 452
15.7.3 预处理器条件 453
15.7.4 编译器控制 453
15.8 扩展处理 454
15.9 顶点着色器的细节 454
15.10 变换反馈 458
15.11 片断着色器 462
附录A GLUT(OpenGL实用工具库)
基础知识 464
附录B 状态变量 468
附录C 齐次坐标和变换矩阵 495
附录D OpenGL和窗口系统 499
术语表 511
《错觉》内容简介:在人工智能异常火热的今天,很多人认为我们生活在一个不可思议的历史时期,人工智能和大数据可能比工业革命更能
《科学大王·生命奥妙》内容简介:这是一套图文并茂的科普读物,为孩子们介绍了人类生活中方方面面的科学知识。科学是关于发现、发
《文化模式批判》内容简介:本书中,文化被逻辑地推导为连接主体和客体的创造存在的实践活动中介,是一种使得实践便利化和高效化的
隐私保护数据发布:模型与算法 本书特色 随着数据挖掘和信息共享等数据库应用的出现与发展,如何保护隐私数据和防止敏感信息泄露成为当前面临的重大挑战。作为数据挖掘与...
《日本论》内容简介:戴季陶曾留学日本多年,与日本民众有过深入的交往,因此对日本有着通透的认识。在本书中,他纵论日本从皇权、
《画笔之下:插画设计入门教程》内容简介:这是一本面向初学者和插画爱好者的教程书,书中将插画设计的思维、技法、理论穿插于六个
《PHP核心技术与最佳实践》是一本致力于为希望成为中高级PHP程序员的读者提供高效而有针对性指导的经典著作。系统归纳和深刻解读
全国数据库技术水平考试一级学员教材 本书特色 本书按照教学大纲中规定的内容,系统、全面地介绍了数据库水平考试所涵概的内容。既重视基本理论、基础知识的阐述,又指导...
《中国对外经济发展研究报告(2017)》内容简介:本书设四个专题,分别为开放型经济研究、人类命运共同体研究、"一带一路”倡议研究
Pro/Engineer Wildfire3.0基础设计与实践-(含光盘) 本书特色 本书首先以机械零件的建立为例提出问题,然后结合建模理论分析问题,再通过建模...
本书分为两大部分。第一部分结合精心挑选的实例,系统地讨论了黑客代码分析技术,包括调试器于反汇编器等典型分析工具的使用、代码
软件调试修炼之道 本书特色 Paul出色阐释了调试各个阶段所涉及的技术、思维、心理等方面的问题:首先要预防缺陷发生。然后诊断和修复缺陷,并确保相同的缺陷不再发生...
潛入!圖解王久恆啟一的圖解教室!在日本,有「職場圖解王」稱號的久恆啟一,本書中首度公開他在圖解教室裡,如何指導學生「自己
PythonWebProgrammingisapracticalintroductiontobuildingnetworkedsystemsintheobjec...
《Web开发入门经典:使用PHP6、Apache和MySQL》以逐步深入的方式介绍了3种重要的开源技术,它们组成了构建一个最活跃的Web站点所需
Visual C#.NET程序设计教程(第2版) 本书特色 《Visual C#.NET程序设计教程(第2版普通高等学校计算机教育十二五规划教材)》(作者罗福强...
本书主要介绍了通信在企业经营管理中所能发挥的作用,以及在企业基础通信设施建设中管理人员应该如何进行技术选择、行动决策和项
Oracle数据库基础教程 本书特色 本书是关于介绍“Oracle数据库基础”的教学用书,书中结合大量的实例,介绍如何利用Oracle 10g来管理和维护数据,...
《漫画分镜头表现教程(第3版)》内容简介:本书共分5章,分别讲解分镜头概述、漫画分镜头表现、四格漫画分镜头表现、特殊分镜头技
《文化的利用和再创造》内容简介:本书以区域宗教为研究对象,考察在儒学文化语境,天主教传入所带来的各种冲击,以及在基础上所形