书海网短评:
Khronos小组编写的OpenGL官方*威指南,素有“OpenGL红宝*”美誉结合OpenGL4.5的新特性,全方位阐释OpenGL编程的各种技术细节、方法和*佳实践,帮助程序员踏上OpenGL专家之路
Khronos小组编写的OpenGL官方*威指南,素有“OpenGL红宝*”美誉
结合OpenGL4.5的新特性,全方位阐释OpenGL编程的各种技术细节、方法和*佳实践,帮助程序员踏上OpenGL专家之路
作为如今世界知名的图形学标准接口,OpenGL的*新版本(OpenGL4.5)显著提升了应用程序的运行效率、灵活性和性能。OpenGL4.5是一个非常成熟而且稳健的平台,可以实现高质量的计算机图像和交互程序的开发工作,并且使用2D和3D物体、彩色图像以及着色器的方式来表达整个场景。
《OpenGL编程指南(原书第9版)》详细介绍了OpenGL4.5(包括4.4、SPIR-V和扩展功能),以及OpenGL着色语言的方方面面,能有效地帮助你编写和维护OpenGL代码。
本版新增OpenGL特性包括:
涵盖OpenGL4.5的直接状态访问(DSA)特性,这是对OpenGL开发模式及应用程序访问对象的方式的一次重大变革。
有关着色器的功能和GPU处理过程的深入讨论以及案例讲解,而越来越多的程序功能正趋向于在图形处理器上直接实现。
根据开发者社区的反馈和建议,增加了一些关键性功能的介绍和案例。
更新了附录部分,包含*新的OpenGL库、相关API、函数、变量、格式,以及调试和性能评价的方法。
作为久负盛名的“*宝书”的*新一版,《OpenGL编程指南(原书第9版)》将着色器相关的技术完全融入了经典的以函数讲解为核心的章节当中,并且通过丰富的代码案例来演示这些现代化的技法。从基础的概念,到物体的绘制、着色、像素、片元、变换方法、纹理、帧缓存、光照和阴影、内存等高级方法和非图形学应用的讲解,无所不包。《OpenGL编程指南(原书第9版)》还讲解了着色器的每一个阶段,包括全新的细分、几何和计算着色器。
《OpenGL编程指南(原书第9版)》共12章,第1章概述OpenGL主要特性和功能;第2章讨论OpenGL中*主要的特性——可编程着色器和SPIR-V;第3章介绍使用OpenGL进行几何体绘制的各种方法,以及一些可以让渲染更为高效的优化手段;第4章阐释OpenGL对于颜色的处理过程;第5章介绍在一个二维计算机屏幕上表现三维场景的操作细节;第6章讨论将几何模型与图像结合来创建真实的、高质量的三维模型的方法;第7章介绍计算机图形的光照效果模拟方法;第8章介绍使用可编程着色器生成纹理和其他表面效果的方法细节;第9章解释OpenGL管理和细分几何表面的着色器功能;第10章介绍在OpenGL渲染流水线中使用着色器进行几何体图元修改的特别技术;第11章介绍使用OpenGL帧缓存和缓存内存实现高级渲染技术和非图形学应用的相关方法;第12章介绍了*新的着色器阶段,将通用计算的方法融合到OpenGL的渲染流水线当中。
约翰·克赛尼希(JohnKessenich),来自Google的资深软件工程师、SPIR-V的创立者,自1999年以来就广泛参与到OpenGL和GLSL的Khronos标准开发当中。他是SPIR-V和GLSL标准说明书的主要编写者,并且开发了相关的着色器编译工具和解析器来考察相关标准的可移植性。
格雷厄姆·塞勒斯(GrahamSellers),来自AMD的软件架构和工程部门,是KhronosAPI的领导者之一,负责OpenGLARB中的AMD功能部分。他为OpenGL和Vulkan的核心标准和扩展都做出了贡献,并且持有图形学和图像处理方面的一些专利。
戴夫·施莱尔(DaveShreiner),一位有着25年经验的计算机图形工作者,编写和教授计算机图形API相关的课程,并且一直是数本Addison-Wesley出版的计算机图形学图书的核心作者,从事相关写作已有近10年之久。
推荐语
译者序
前 言
致 谢
第1章 OpenGL概述1
1.1 什么是OpenGL1
1.2 初识OpenGL程序2
1.3 OpenGL语法6
1.4 OpenGL渲染管线7
1.4.1 准备向OpenGL传输数据8
1.4.2 将数据传输到OpenGL8
1.4.3 顶点着色9
1.4.4 细分着色9
1.4.5 几何着色9
1.4.6 图元装配9
1.4.7 剪切9
1.4.8 光栅化9
1.4.9 片元着色10
1.4.10 逐片元的操作10
1.5 第一个程序:深入分析11
1.5.1 进入main()函数11
1.5.2 OpenGL的初始化过程12
1.5.3 第一次使用OpenGL进行渲染21
第2章 着色器基础24
2.1 着色器与OpenGL25
2.2 OpenGL的可编程管线25
2.3 OpenGL着色语言概述27
2.3.1 使用GLSL构建着色器27
2.3.2 存储限制符33
2.3.3 语句36
2.3.4 计算的不变性40
2.3.5 着色器的预处理器42
2.3.6 编译器的控制44
2.3.7 全局着色器编译选项44
2.4 数据块接口45
2.4.1 uniform块45
2.4.2 指定着色器中的uniform块46
2.4.3 从应用程序中访问uniform块47
2.4.4 buffer块53
2.4.5 in/out块、位置和分量53
2.5 着色器的编译54
2.6 着色器子程序59
2.6.1 GLSL的子程序设置59
2.6.2 选择着色器子程序60
2.7 独立的着色器对象62
2.8 SPIR-V64
2.8.1 选择SPIR-V的理由64
2.8.2 SPIR-V与OpenGL66
2.8.3 使用GLSL在OpenGL中生成SPIR-V67
2.8.4 Glslang69
2.8.5 SPIR-V中包含了什么69
第3章 OpenGL绘制方式70
3.1 OpenGL图元70
3.1.1 点71
3.1.2 线、条带与循环线72
3.1.3 三角形、条带与扇面72
3.2 OpenGL缓存数据75
3.2.1 创建与分配缓存75
3.2.2 向缓存输入和输出数据77
3.2.3 访问缓存的内容81
3.2.4 丢弃缓存数据86
3.3 顶点规范86
3.3.1 深入讨论VertexAttribPointer87
3.3.2 静态顶点属性的规范90
3.4 OpenGL的绘制命令92
3.4.1 图元的重启动99
3.4.2 多实例渲染102
第4章 颜色、像素和片元112
4.1 基本颜色理论113
4.2 缓存及其用途114
4.2.1 缓存的清除116
4.2.2 缓存的掩码117
4.3 颜色与OpenGL118
4.3.1 颜色的表达与OpenGL118
4.3.2 平滑数据插值119
4.4 片元的测试与操作121
4.4.1 剪切测试122
4.4.2 多重采样的片元操作123
4.4.3 模板测试124
4.4.4 模板的例子125
4.4.5 深度测试127
4.4.6 融混129
4.4.7 逻辑操作133
4.4.8 遮挡查询134
4.4.9 条件渲染138
4.5 多重采样139
4.6 逐图元的反走样141
4.6.1 线段的反走样142
4.6.2 多边形的反走样143
4.7 像素数据的读取和拷贝143
4.8 拷贝像素矩形145
第5章 视口变换、裁减、剪切与反馈147
5.1 观察视图148
5.1.1 视图模型148
5.1.2 相机模型148
5.1.3 正交视图模型151
5.2 用户变换152
5.2.1 矩阵乘法的回顾153
5.2.2 齐次坐标155
5.2.3 线性变换与矩阵157
5.2.4 法线变换167
5.2.5 OpenGL矩阵168
5.3 OpenGL变换170
5.3.1 高级技巧:用户裁减和剪切172
5.3.2 OpenGL变换的控制173
5.4 transformfeedback174
5.4.1 transformfeedback对象175
5.4.2 transformfeedback缓存176
5.4.3 配置transformfeedback的变量179
5.4.4 transformfeedback的启动和停止185
5.4.5 transformfeedback的示例:粒子系统187
第6章 纹理与帧缓存192
6.1 纹理综述193
6.2 基本纹理类型194
6.3 创建并初始化纹理195
6.4 指定纹理数据200
6.4.1 显式设置纹理数据200
6.4.2 从缓存中加载纹理202
6.4.3 从文件加载图像203
6.4.4 获取纹理数据206
6.4.5 纹理数据的排列布局207
6.5 纹理格式211
6.5.1 内部格式211
6.5.2 外部格式214
6.6 压缩纹理216
6.7 采样器对象218
6.8 纹理的使用220
6.8.1 纹理坐标222
6.8.2 排列纹理数据225
6.8.3 使用多重纹理227
6.9 复杂纹理类型229
6.9.1 3D纹理229
6.9.2 纹理数组230
6.9.3 立方体映射纹理231
6.9.4 阴影采样器236
6.9.5 深度-模板纹理237
6.9.6 缓存纹理238
6.10 纹理视图240
6.11 滤波方式243
6.11.1 线性滤波243
6.11.2 使用和生成mipmap245
6.11.3 计算mipmap层次249
6.11.4 mipmap细节层次的控制250
6.12 高级纹理查询函数250
6.12.1 显式的细节层次控制250
6.12.2 显式的梯度设置251
6.12.3 带有偏移参数的纹理获取函数251
6.12.4 投影纹理252
6.12.5 在着色器中执行纹理查询253
6.12.6 纹素收集255
6.12.7 组合功能的特殊函数255
6.13 无绑定纹理256
6.13.1 纹理句柄256
6.13.2 纹理驻留257
6.13.3 采样无绑定纹理258
6.14 稀疏纹理259
6.14.1 稀疏纹理的数据提交259
.......









