《OpenGL着色语言》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:(美)Randi J. Rost著;天宏工作室译
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2006
  • ISBN:7115151393
  • 页数:352 页
图书介绍:本书要求读者需要具有一定的数学知识,适合有兴趣编写着色器的应用程序开发人员,可作为GLSL开发者的参考手册。不论专家或者着色器编程初学者,都能在本书中发现所需的财富。

第1章 OpenGL基础知识概述 1

1.1 OpenGL的历史 1

1.2 发展OpenGL 2

1.3 执行模型 3

1.4 帧缓冲区 3

1.5 状态 5

1.6 处理管线 6

1.7 绘制几何对象 6

1.7.1 指定几何对象 7

1.7.2 逐个顶点操作 8

1.7.3 图元组装 9

1.7.4 图元处理 10

1.7.5 栅格化 10

1.7.6 片元处理 11

1.7.7 逐个片元的操作 11

1.7.8 帧缓冲区操作 12

1.8 绘制图像 12

1.8.1 像素解码 12

1.8.2 像素传输 13

1.8.3 栅格化和后端处理 13

1.9 坐标变换 14

1.8.4 读取控制 14

1.10 纹理 18

1.11 小结 21

1.12 参考资料 21

第2章 基础知识 23

2.1 OpenGL着色语言简介 23

2.2 为什么要编写着色器 24

2.3 OpenGL可编程处理器 25

2.3.1 顶点处理器 26

2.3.2 片元处理器 29

2.4.1 语言的设计考虑 31

2.4 语言概述 31

2.4.2 以C为基础 33

2.4.3 对C的增加 33

2.4.4 来自C++的增加 34

2.4.5 不受支持的C特性 35

2.4.6 其他差异 35

2.5 系统概述 36

2.5.1 驱动程序模型 36

2.5.2 OpenGL着色语言编译器/链接器 37

2.5.3 OpenGL API扩展 38

2.6 主要优点 40

2.7 小结 41

2.8 参考资料 42

第3章 语言定义 43

3.1 着色器对的实例 43

3.2 数据类型 44

3.2.1 标量 45

3.2.2 矢量 46

3.2.3 矩阵 47

3.2.4 取样器 47

3.2.6 数组 48

3.2.5 结构 48

3.2.7 Void 49

3.2.8 声明和作用域 49

3.2.9 类型匹配与提升 50

3.3 初始化器和构造函数 50

3.4 类型转换 51

3.5 限定符和着色器接口 52

3.5.1 Attribute限定符 52

3.5.2 Uniform限定符 52

3.5.3 Varying限定符 53

3.5.4 常量限定符 53

3.6 流控制 54

3.5.5 缺少限定符 54

3.6.1 函数 55

3.6.2 调用约定 55

3.6.3 内置函数 56

3.7 操作 56

3.7.1 索引 57

3.7.2 混合 57

3.7.3 按部分操作 58

3.8 预处理器 60

3.9 预处理器表达式 61

3.10 错误处理 61

3.12 参考资料 62

3.11 小结 62

第4章 OpenGL可编程管线 65

4.1 顶点处理器 65

4.1.1 顶点属性 66

4.1.2 一致变量 67

4.1.3 特殊的输出变量 68

4.1.4 内置的易变变量 68

4.1.5 用户定义的易变变量 69

4.2 片元处理器 69

4.2.1 易变变量 70

4.2.4 特殊的输出变量 71

4.2.2 一致变量 71

4.2.3 特殊的输入变量 71

4.3 内置一致变量 72

4.4 内置常量 75

4.5 与OpenGL的固定功能交互 76

4.5.1 两侧颜色模式 76

4.5.2 点大小模式 77

4.5.3 裁剪 77

4.5.4 光栅位置 78

4.5.5 位置不变性 78

4.5.6 纹理处理 79

4.6 小结 80

4.7 参考资料 80

第5章 内置函数 83

5.1 角度和三角函数 84

5.2 指数函数 85

5.3 常见函数 86

5.4 几何函数 90

5.5 矩阵函数 92

5.6 矢量关系函数 92

5.7 纹理访问函数 94

5.8 片元处理函数 95

5.9 噪声函数 96

5.10 小结 97

5.11 参考资料 97

第6章 简单的着色实例 99

6.1 砖块着色器简介 99

6.2 顶点着色器 100

6.3 片元着色器 104

6.4 观察 108

6.5 小结 108

6.6 参考资料 109

第7章 OpenGL着色语言API 111

7.1 创建着色器对象 112

7.2 编译着色器对象 113

7.3 链接和使用着色器 114

7.4 清理工作 116

7.5 查询函数 117

7.6 指定顶点属性 120

7.7 指定一致变量 128

7.8 采样器 133

7.9 开发辅助工具 133

7.10 与实现有关的API值 134

7.11 砖块着色器的应用程序代码 135

7.12 小结 138

7.13 参考资料 138

第8章 开发着色器 141

8.1 一般原则 141

8.1.1 理解问题 141

8.1.2 逐步提高复杂性 142

8.1.3 测试和重复 142

8.1.4 尽量简化 142

8.2.1 考虑计算频率 143

8.2 性能考虑 143

8.1.5 模块化 143

8.2.2 分析算法 144

8.2.3 使用内置函数 144

8.2.4 使用矢量 144

8.2.5 使用纹理编写复杂函数 144

8.2.6 回顾信息日志 144

8.3 着色器调试 145

8.3.1 使用顶点着色器的输出 145

8.3.2 使用片元着色器的输出 145

8.4.1 着色器开发工具 146

8.4.1 RenderMonkey 146

8.3.3 使用简单的几何对象 146

8.4.2 OpenGL着色语言编译器前端 148

8.5 小结 149

8.6 参考资料 149

第9章 传统着色器 151

9.1 变换 151

9.2 光源 152

9.2.1 定向光源 153

9.2.2 点光源 153

9.2.3 聚光灯 155

9.3 材质属性和光照 156

9.4 两侧光照 158

9.5 无光照 158

9.6 雾化 159

9.7 纹理坐标生成 160

9.8 用户裁剪 162

9.9 纹理应用 162

9.10 小结 164

9.11 参考资料 164

第10章 存储的纹理着色器 165

10.1 从着色器内部访问纹理贴图 166

10.2.1 应用程序设置 167

10.2 简单的纹理处理实例 167

10.2.2 顶点着色器 168

10.2.3 片元着色器 169

10.3 多重纹理处理实例 169

10.3.1 应用程序设置 171

10.3.2 顶点着色器 171

10.3.3 片元着色器 172

10.4 环境贴图实例 173

10.4.1 应用程序设置 174

10.4.2 顶点着色器 174

10.4.3 片元着色器 175

10.5 使用BRDF数据的多项式纹理贴图 177

10.5.1 应用程序设置 179

10.5.2 顶点着色器 180

10.5.3 片元着色器 182

10.6 小结 183

10.7 参考资料 184

第11章 程序纹理着色器 187

11.1 常规图案 188

11.1.1 条纹顶点着色器 189

11.1.2 条纹片元着色器 190

11.2 玩具球 191

11.2.1 应用程序设置 192

11.2.2 顶点着色器 192

11.2.3 片元着色器 193

11.3 网格 196

11.4 凹凸贴图 197

11.4.1 应用程序设置 199

11.4.2 顶点着色器 200

11.4.3 片元着色器 201

11.4.4 法向量贴图 202

11.6 参考资料 203

11.5 小结 203

第12章 噪声 205

12.1 定义噪声 206

12.1.1 2D噪声 209

12.1.2 更高维度的噪声 210

12.1.3 在OpenGL着色器中使用噪声 210

12.2 噪声纹理 211

12.3 权衡考虑 213

12.4 一个简单的噪声着色器 214

12.4.1 应用程序设置 214

12.4.2 顶点着色器 214

12.4.3 片元着色器 215

12.5 扰动 216

12.5.1 太阳表面着色器 216

12.5.2 大理石 217

12.6 花岗岩 217

12.7 木材 218

12.7.1 应用程序设置 218

12.7.2 片元着色器 218

12.8 小结 220

12.9 参考资料 220

第13章 动画着色器 223

13.1 开/关 224

13.2 阈值 224

13.3 转换 224

13.4 关键帧插值 225

13.5 其他混合效果 227

13.6 粒子系统 227

13.6.1 应用程序设置 228

13.6.2 纸炮顶点着色器 230

13.6.3 纸炮片元着色器 231

13.7 摇摆 232

13.6.4 进一步增强 232

13.8 小结 235

13.9 参考资料 235

第14章 反走样过程纹理 237

14.1 走样的原因 237

14.2 避免走样 238

14.3 提高分辨率 239

14.4 反走样的条纹实例 240

14.4.1 生成条纹 240

14.4.2 分析预过滤 241

14.4.3 自适应分析预过滤 242

14.4.4 分析积分 244

14.4.5 反走样的砖块片元着色器 246

14.5 频率限定 247

14.6 小结 248

14.7 参考资料 249

第15章 反真实着色器 251

15.1 剖面线实例 251

15.1.1 应用程序设置 252

15.1.2 顶点着色器 252

15.1.3 生成剖面线 253

15.1.4 获得一致的线条密度 253

15.1.6 添加特征 255

15.1.5 光照 255

15.1.7 剖面线片元着色器 256

15.2 技术示意图实例 257

15.2.1 应用程序设置 259

15.2.2 顶点着色器 259

15.2.3 片元着色器 260

15.3 Mandelbrot实例 261

15.3.1 Mandelbrot set简介 261

15.3.2 顶点着色器 263

15.3.3 片元着色器 263

15.3.4 Julia set 265

15.4 小结 266

15.5 参考资料 266

第16章 用于图像处理的着色器 269

16.1 几何图像变换 270

16.2 数学贴图 270

16.3 查找表操作 270

16.4 颜色空间变换 271

16.5 图像内插和外插 272

16.5.1 亮度 272

16.5.4 锐度 273

16.5.2 对比度 273

16.5.3 饱和度 273

16.6 混合模式 274

16.6.1 正常 274

16.6.2 平均 275

16.6.3 溶解 275

16.6.4 背面 275

16.6.5 清除 275

16.6.6 变暗 275

16.6.10 颜色加深 276

16.6.12 叠加 276

16.6.11 颜色减淡 276

16.6.8 正片叠底 276

16.6.9 屏幕 276

16.6.7 变亮 276

16.6.13 柔光 277

16.6.14 强光 277

16.6.15 相加 277

16.6.16 相减 277

16.7 卷积 278

16.6.19 排除 278

16.6.20 不透明度 278

16.6.18 反差值 278

16.6.17 差值 278

16.7.1 平滑 280

16.7.2 边缘检测 282

16.7.3 锐化 283

16.8 小结 284

16.9 参考资料 284

第17章 语言的比较 287

17.1 着色语言的历史 287

17.2 RenderMan 288

17.3 OpenGL Shader(ISL) 290

17.4 HLSL 291

17.5 Cg 293

17.6 小结 294

17.7 参考资料 295

附录A 语言的语法 297

附录B API函数参考 309

glAttachObjectARB 309

glBindAttribLocationARB 310

glCompileShaderARB 312

glCreateProgramObjectARB 313

glCreateShaderObjectARB 314

glDeleteObjectARB 315

glDetachObjectARB 316

glEnableVertexAttribArrayARB 317

glGetActiveAttribARB 318

glGetActiveUniformARB 320

glGetAttachedObjectsARB 322

glGetAttribLocationARB 323

glGetHandleARB 324

glGetinfoLogARB 324

glGetObjectParameterARB 326

glGetShaderSourceARB 328

glGetUniformARB 329

glGetUniformLocationARB 331

glGetVertexAttribARB 332

glGetVertexAttribPointervARB 333

glLinkProgramARB 334

glShaderSourceARB 337

glUniformARB 338

glUseProgramObjectARB 342

glValidateProgramARB 344

glVertexAttribARB 345

glVertexAttribPointerARB 348

后记 351