图形着色器
2013-3
清华大学出版社
[美]贝利,[美]坎宁安
刘鹏
无
本书详细阐述了与着色器程序设计相关的高效解决方案及相应的数据结构和算法,主要包括固定功能管线、OpenGL着色
器的发展、着色器基本概念、使用glman、GLSL着色器语言、光照、顶点着色器、片元着色器和表面外观、片元着色器中的表
面纹理、噪声、基于着色器的图像处理、几何着色器的概念和示例、细分着色器、GLSLAPI、基于着色器的科学可视化计算以
及着色器应用等内容。此外,本书还提供了相应的算法、代码以及伪代码,以帮助读者进一步理解相关方案的实现过程。
本书适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学教材和参考手册。
第1章 固定功能管线 1
传统的视见方案 1
顶点操作 1
管线的片元处理 3
图形管线中的状态 4
传统视见机制的实现方案 5
顶点处理操作 5
渲染处理操作 6
固定管线中的齐次坐标 9
顶点数组 10
本章小结 13
本章练习 14
第2章 OpenGL着色器的发展 16
着色器发展史 17
OpenGL着色器发展史 19
OpenGL 2.0/GLSL 1.10 19
OpenGL 3.x/GLSL 3.30 19
OpenGL 4.0/GLSL 4.00 20
OpenGL 4.x/GLSL 4.x0 21
内部原因 21
OpenGL ES 22
处理不同版本 22
本书方案 22
变量名命名规则 23
本章练习 23
第3章 着色器基本概念 24
图形管线中的着色器 24
顶点着色器 26
片元着色器 29
细分着色器 31
几何着色器 34
图形着色器——理论与实践(第 2 版) ·X·
GLSL着色器语言 35
应用程序与着色器之间的数据传递 38
在应用程序中定义attribute变量 38
在应用程序中定义uniform变量 40
GLSL新版本之间的转换方式 42
本章练习 44
第4章 glman的使用 45
使用glman 46
加载GLIB文件 47
编辑GLIB文件和着色器文件 47
生成GLIB场景 47
窗口和视见操作 47
转换操作 48
定义几何对象 48
定义纹理 50
定义着色器名 50
其他命令 51
定义uniform变量 51
GLIB文件示例 53
纹理和噪声 54
使用纹理 55
使用噪声纹理 55
glman界面窗口功能 56
生成并显示场景的硬拷贝 56
全局场景转换 57
眼睛转换 57
对象拾取和转换 57
纹理转换 58
显示帧速率 58
其他功能项 59
本章练习 59
第5章 GLSL着色器语言 61
着色器语言的成因 61
图形卡功能项 62
通用GLSL语言 63
共享命名空间 64
函数扩展和操作符功能项 64
目 录 ·XI·
新增函数 64
新增变量类型 65
新增函数参数类型 65
具体实现 65
忽略的语言功能项 66
新增矩阵和向量类型 66
名称集 67
向量构造函数 67
矩阵和向量扩展函数 68
矩阵和向量的扩展操作 70
新增函数 71
混合操作 75
新增函数参数类型 75
const变量 76
兼容模式 76
定义兼容模式 76
OpenGL 2.1内建数据类型 77
综述 81
本章练习 81
第6章 光照 82
ADS光照模型 82
ADS光照模型函数 83
光源类型 85
固定光源 85
有向光源 86
聚光灯 86
构建基于着色器的光照机制 88
固定着色 88
平滑着色 89
Phong着色方案 89
各向异性着色 90
本章练习 91
第7章 顶点着色器 92
图形管线中的顶点着色器 93
顶点着色器的输入数据 93
源自顶点着色器的输出数据 94
几何体 94
顶点着色器之后的固定功能处理 96
图形着色器——理论与实践(第 2 版) ·XII·
顶点着色器和细分着色器之间的关系 96
顶点着色器和几何着色器之间的关系 96
利用顶点着色器替换固定功能图形操作 97
标准的顶点处理过程 97
基于顶点着色器的固定功能管线扩展 97
顶点修正 98
顶点着色器中的问题 100
生成法线 100
综述 101
本章练习 102
第8章 片元着色器和表面外观 103
片元着色器的基本功能 104
片元着色器的输入数据 104
片元着色器的in变量 105
坐标系 106
片元着色器处理机制 107
源自片元着色器的输出数据 107
利用片元处理器替换固定功能处理 107
着色机制 107
传统的纹理贴图 108
伪色 108
片元着色器后续步骤 110
其他着色器效果 110
像素丢弃 111
Phong着色 111
基于解析法线的着色机制 112
各向异性着色 113
基于数据驱动的色彩方案 114
使用其他数据生成图像 115
本章练习 116
第9章 片元着色器中的表面纹理 117
纹理坐标 117
传统的纹理贴图 117
GLSL纹理贴图 118
纹理上下文 120
固定功能管线中的纹理环境 121
纹理采样参数 121
目 录 ·XIII·
采样器 122
过程纹理 122
凹凸贴图 127
立方体贴图 132
渲染至纹理 135
渲染至纹理(glman多路渲染) 138
本章练习 140
第10章 噪声 141
噪声的基本概念 141
3种噪声类型:数值、梯度以及数值+梯度 142
三次插值和五次插值 142
噪声方程 143
其他噪声 145
分形布朗运动(FBM,1/f,倍频程) 146
二维噪声和三维噪声 146
基于glman的噪声 148
基于内建GLSL函数使用噪声纹理 149
湍流 149
不同环境中的噪声示例 151
大理石着色器 153
云彩着色器 153
木材着色器 155
与噪声相关的高级话题 156
noisegraph应用程序 156
本章练习 157
第11章 基于着色器的图像处理 159
基本概念 160
单幅图像处理 160
亮度 160
CMYK转换 161
色调转换 163
图像过滤机制 165
图像模糊操作 166
色度键图像 167
立体视图 169
3D电视 171
边检测技术 173
图形着色器——理论与实践(第 2 版) ·XIV·
浮雕效果 174
卡通着色器 176
艺术视觉效果 177
图像的翻转、旋转和扭曲 178
图像混合处理 182
基于固定基图像的图像混合操作 183
反像 183
亮度 184
对比度 184
图像的自身混合操作 185
饱和度 185
锐利度 186
不同图像间的混合操作 187
其他合成方案 188
图像渐变 190
内容提示 194
本章练习 195
第12章 几何着色器的概念和示例 198
几何着色器的功能 198
新型邻接图元 200
基于输入和输出变量的布局结构 201
新增OpenGL API函数 201
新增GLSL变量以及变量类型 203
顶点着色器或细分着色器与几何着色器之间的通信 203
几何着色器中的法线 204
应用示例 205
Bezier曲线 205
收缩三角形 207
球体细分 208
3D对象轮廓边 211
本章练习 213
第13章 细分着色器 214
细分着色器定义 214
细分着色器与几何着色器 215
细分着色器概念 216
设置细分级别时的问题 219
应用示例 219
目 录 ·XV·
等值线 219
Bezier曲面 222
球体细分 228
基于屏幕覆盖率的整球细分 233
PN三角形 236
综述 241
本章练习 241
第14章 GLSL API 243
OpenGL程序处理中的着色器 243
处理OpenGL扩展 244
GLSL着色器程序的创建方式 245
创建并编译着色器对象 245
CheckGLErrors()函数 247
创建、绑定、链接并激活着色器程序 248
生成着色器程序并绑定着色器对象 248
着色器程序的链接操作 249
激活着色器程序 250
向着色器传递数据 250
在应用程序中定义uniform变量 251
兼容模式下的uniform变量 253
在应用程序中定义attribute变量 254
兼容模式下的attribute变量 255
着色器程序的C++控制类 256
本章练习 257
第15章 基于着色器的科学可视化计算 258
基于图像的可视化技术 258
负像 258
图像边检测 259
卡通渲染 259
双曲线几何学 260
3D标量数据可视化计算 263
点云 264
剖切面 267
体探测 270
直接体渲染 271
其他转换函数 276
通过几何对象传递数据值 279
图形着色器——理论与实践(第 2 版) ·XVI·
地形凹凸贴图 280
流显示 283
2D线积分卷积 283
3D线积分卷积 285
获取流线对象 286
几何可视化 289
轮廓边技术 289
刺状区 290
本章练习 292
第16章 着色器应用 295
光线干涉现象 295
衍射光栅 295
油膜 299
透镜效果 301
浴室玻璃 304
大气效果 306
彩虹 307
辉光效果 310
其他视效函数 312
glman Timer函数 313
迪斯科球 313
雾效果 315
3D几何体变形 316
算法艺术 319
Connett圆 319
运动状态下的可见信息 321
爆炸效果着色器 322
本章练习 324
参考文献 326
附录A 基于GLSL程序的C++类 329
附录B Matrix4 C++类 331
附录C Vec C++类 334
附录D 顶点数组类 336
无