计算机图形学编程(使用OpenGL和C++)(第2版)

计算机图形学编程(使用OpenGL和C++)(第2版)
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者: [美] (V. Scott Gordon) ,
2022-12
版次: 2
ISBN: 9787115596338
定价: 89.80
装帧: 平装
页数: 291页
字数: 498千字
19人买过
  • 本书以OpenGL和C++作为工具,介绍计算机图形学编程的相关内容。全书从图形编程的基础和准备工作讲起,介绍了OpenGL图像管线、3D模型、纹理贴图、光照、阴影、天空和背景、增强表面细节、曲面细分、几何着色器、水面模拟、光线追踪等计算机图形学编程技术。本书各章配备了不同形式的习题,供读者巩固所学知识。
      本书适合作为高等院校计算机科学专业的计算机图形编程课程的教材或辅导书,也适合对计算机图形编程感兴趣的读者自学。 V.斯科特·戈登(V. Scott Gordon),加利福尼亚州立大学萨克拉门托分校教授,撰写及合著出版物30多部,涉及人工智能、神经网络、进化计算、计算机图形学、软件工程、视频和策略游戏编程,以及计算机科学教育等多个领域。戈登博士在科罗拉多州立大学获得博士学位。

    约翰·克莱维吉(John Clevenger ),加利福尼亚州立大学萨克拉门托分校教授,拥有超过40年的教学经验,教学内容包括高级图形学、游戏架构、操作系统、VLSI芯片设计、系统仿真等主题。他是国际大学生程序设计竞赛(ICPC)的技术总监,负责监督编程竞赛支持系统PC^2的持续开发。克莱维吉博士在加州大学戴维斯分校获得博士学位。 第 1 章 入门   1 

    1.1 语言和库 1

    1.1.1 C++ 1

    1.1.2 OpenGL / GLSL 2

    1.1.3 窗口管理库 2

    1.1.4 扩展库 2

    1.1.5 数学库 3

    1.1.6 纹理图像加载库 3

    1.1.7 可选库 3

    1.2 安装和配置 3

    参考资料 4

    第 2 章 OpenGL 图像管线 5

    2.1 OpenGL 管线 5

    2.1.1 C++/OpenGL 应用程序 6

    2.1.2 顶点着色器和片段着色器 8

    2.1.3 曲面细分着色器 11

    2.1.4 几何着色器 11

    2.1.5 栅格化 12

    2.1.6 片段着色器 13

    2.1.7 像素操作 13

    2.2 检测 OpenGL 和 GLSL 错误 14

    2.3 从文件中读取 GLSL 源代码 16

    2.4 从顶点构建对象 17

    2.5 场景动画 18

    2.6 C++代码文件结构 19

    补充说明 20

    习题 21

    参考资料 21

    第 3 章 数学基础 22

    3.1 3D 坐标系统 22

    3.2 点 22

    3.3 矩阵 22

    3.4 变换矩阵 24

    3.4.1 平移矩阵 24

    3.4.2 缩放矩阵 25

    3.4.3 旋转矩阵 25

    3.5 向量 26

    3.5.1 点积的应用 27

    3.5.2 叉积的应用 28

    3.6 局部和世界空间 28

    3.7 视觉空间和合成相机 28

    3.8 投影矩阵 30

    3.8.1 透视投影矩阵 30

    3.8.2 正射投影矩阵 31

    3.9 LookAt 矩阵 32

    3.10 用来构建矩阵变换的 GLSL

    函数 32

    补充说明 33

    习题 34

    参考资料 34

    第 4 章 管理 3D 图形数据 35

    4.1 缓冲区和顶点属性 35

    4.2 统一变量 37

    4.3 顶点属性插值 37

    4.4 模型-视图和透视矩阵 38

    4.5 我们的第 一个3D程序—— 一个3D立方体 39

    4.6 渲染一个对象的多个副本 45

    实例化 45

    4.7 在同一个场景中渲染多个不同模型 47

    4.8 矩阵栈 49

    4.9 应对“Z 冲突”伪影 53

    4.10 图元的其他选项 54

    4.11 性能优先的编程方法 55

    4.11.1 尽量减少动态内存空间分配 55

    4.11.2 预先计算透视矩阵 55

    4.11.3 背面剔除 56

    补充说明 58

    习题 58

    参考资料 59

    第 5 章 纹理贴图 60

    5.1 加载纹理图像文件 60

    5.2 纹理坐标 61

    5.3 创建纹理对象 62

    5.4 构建纹理坐标 62

    5.5 将纹理坐标载入缓冲区 63

    5.6 在着色器中使用纹理:采样器变量和纹理单元 64

    5.7 纹理贴图:示例程序 64

    5.8 多级渐远纹理贴图 66

    5.9 各向异性过滤 69

    5.10 环绕和平铺 69

    5.11 透视变形 70

    5.12 材质—更多OpenGL细节 71

    补充说明 72

    习题 72

    参考资料 72

    第 6 章 3D 模型 74

    6.1 程序构建模型—构建一个球体 74

    6.2 OpenGL 索引—构建一个环面 79

    6.2.1 环面 79

    6.2.2 OpenGL 中的索引 79

    6.3 加载外部构建的模型 84

    补充说明 90

    习题 90

    参考资料 90

    第 7 章 光照 91

    7.1 光照模型 91

    7.2 光源 91

    7.3 材质 93

    7.4 ADS 光照计算 95

    7.5 实现 ADS 光照 96

    7.5.1 Gouraud 着色(双线性光强插值法) 97

    7.5.2 Phong 着色 101

    7.6 结合光照与纹理 105

    补充说明 106

    历史记录 106

    习题 107

    参考资料 107

    第 8 章 阴影 108

    8.1 阴影的重要性 108

    8.2 投影阴影 108

    8.3 阴影体 109

    8.4 阴影贴图 109

    8.4.1 阴影贴图(第 1 轮)—— 从光源位置“绘制”物体 110

    8.4.2 阴影贴图(中间步骤)——将 Z 缓冲区复制到纹理 111

    8.4.3 阴影贴图(第 2 轮)—— 渲染带阴影的场景 111

    8.5 阴影贴图示例 113

    8.6 阴影贴图的伪影 117

    8.7 柔和阴影 119

    8.7.1 现实世界中的柔和阴影 119

    8.7.2 生成柔和阴影——百分比邻近滤波(PCF) 120

    8.7.3 柔和阴影/PCF 程序 122

    补充说明 124

    习题 124

    参考资料 125

    第 9 章 天空和背景 126

    9.1 天空盒 126

    9.2 穹顶 127

    9.3 实现天空盒 128

    9.3.1 从头开始构建天空盒 128

    9.3.2 使用 OpenGL 立方体贴图 131

    9.4 环境贴图 133

    补充说明 136

    习题 137

    参考资料 137

    第 10 章 增强表面细节 138

    10.1 凹凸贴图 138

    10.2 法线贴图 139

    10.3 高度贴图 145

    补充说明 146

    习题 147

    参考资料 147

    第 11 章 参数曲面 148

    11.1 二次贝塞尔曲线 148

    11.2 三次贝塞尔曲线 149

    11.3 二次贝塞尔曲面 151

    11.4 三次贝塞尔曲面 152

    补充说明 153

    习题 153

    参考资料 153

    第 12 章 曲面细分 154

    12.1 OpenGL 中的曲面细分 154

    12.2 贝塞尔曲面细分 158

    12.3 地形、高度图的细分 162

    12.4 控制细节级别 166

    补充说明 168

    习题 168

    参考资料 168

    第 13 章 几何着色器 169

    13.1 OpenGL 中的逐个图元处理 169

    13.2 修改图元 170

    13.3 删除图元 172

    13.4 添加图元 173

    13.5 更改图元类型 175

    补充说明 176

    习题 176

    参考资料 176

    第 14 章 其他技术 177

    14.1 雾 177

    14.2 复合、混合、透明度 178

    14.3 用户定义剪裁平面 182

    14.4 3D 纹理 183

    14.5 噪声 187

    14.6 噪声应用——大理石 190

    14.7 噪声应用——木材 193

    14.8 噪声应用——云 195

    14.9 噪声应用——特殊效果 198

    补充说明 199

    习题 200

    参考资料 200

    第 15 章 模拟水面 202

    15.1 游泳池表面和底部的几何设定 202

    15.2 添加水面反射和折射 205

    15.3 添加水面波浪 212

    15.4 更多修正 213

    15.5 为水的流动添加动画 216

    15.6 水下焦散 218

    补充说明 219

    习题 220

    参考资料 220

    第 16 章 光线追踪和计算着色器 221

    16.1 计算着色器 222

    16.1.1 编译及使用计算着色器 222

    16.1.2 计算着色器中的并行计算 222

    16.1.3 工作组 225

    16.1.4 工作组详解 225

    16.1.5 工作组的限制 227

    16.2 光线投射 227

    16.2.1 定义 2D 纹理图像 228

    16.2.2 构建和显示光线投射图像 228

    16.2.3 光线与球面的交点 233

    16.2.4 轴对齐的光线与立方体的交点 234

    16.2.5 无光照的简单光线投射的输出 235

    16.2.6 添加 ADS 光照 235

    16.2.7 添加阴影 237

    16.2.8 非轴对齐的光线与立方体的交点 238

    16.2.9 确定纹理坐标 239

    16.2.10 平面交点和过程纹理 244

    16.3 光线追踪 246

    16.3.1 反射 246

    16.3.2 折射 247

    16.3.3 结合反射、折射和纹理 249

    16.3.4 增加光线数 250

    16.3.5 通用解决方案 254

    16.3.6 更多示例 257

    16.3.7 透明对象的颜色混合 260

    补充说明 264

    习题 265

    参考资料 265

    第 17 章 3D 眼镜和 VR 头显的立体视觉 267

    17.1 双目视图和投影矩阵 268

    17.2 色差式渲染 269

    17.3 并排式渲染 270

    17.4 修正头显的镜头畸变 271

    17.5 简单的测试硬件配置 276

    补充说明 277

    习题 277

    参考资料 277

    附录 A PC(Windows)上的安装与设置 279

    A.1 安装库和开发环境 279

    A.1.1 安装开发环境 279

    A.1.2 安装 OpenGL/GLSL 279

    A.1.3 准备 GLFW 279

    A.1.4 准备 GLEW 280

    A.1.5 准备 GLM 280

    A.1.6 准备 SOIL2 280

    A.1.7 准备共享的 lib 和include 文件夹 280

    A.2 在 MS Visual Studio 中开发和部署 OpenGL 项目 281

    创建 Visual Studio 自定义项目模板 281

    参考资料 282

    附录 B Mac(macOS)平台上的安装与设置 283

    B.1 安装库和开发环境 283

    B.1.1 准备并安装依赖库 283

    B.1.2 准备开发环境 284

    B.2 修改 Mac 的 C++/OpenGL/ GLSL 应用程序代码 285

    B.2.1 修改 C++代码 285

    B.2.2 修改 GLSL 代码 286

    参考资料 287

    附录 C 使用 Nsight 图形调试器 288

    C.1 关于 NVIDIA Nsight 288

    C.2 设置 Nsight 288

    C.3 在 Nsight 中运行 C++/OpenGL

    应用程序 289

    参考资料 291
  • 内容简介:
    本书以OpenGL和C++作为工具,介绍计算机图形学编程的相关内容。全书从图形编程的基础和准备工作讲起,介绍了OpenGL图像管线、3D模型、纹理贴图、光照、阴影、天空和背景、增强表面细节、曲面细分、几何着色器、水面模拟、光线追踪等计算机图形学编程技术。本书各章配备了不同形式的习题,供读者巩固所学知识。
      本书适合作为高等院校计算机科学专业的计算机图形编程课程的教材或辅导书,也适合对计算机图形编程感兴趣的读者自学。
  • 作者简介:
    V.斯科特·戈登(V. Scott Gordon),加利福尼亚州立大学萨克拉门托分校教授,撰写及合著出版物30多部,涉及人工智能、神经网络、进化计算、计算机图形学、软件工程、视频和策略游戏编程,以及计算机科学教育等多个领域。戈登博士在科罗拉多州立大学获得博士学位。

    约翰·克莱维吉(John Clevenger ),加利福尼亚州立大学萨克拉门托分校教授,拥有超过40年的教学经验,教学内容包括高级图形学、游戏架构、操作系统、VLSI芯片设计、系统仿真等主题。他是国际大学生程序设计竞赛(ICPC)的技术总监,负责监督编程竞赛支持系统PC^2的持续开发。克莱维吉博士在加州大学戴维斯分校获得博士学位。
  • 目录:
    第 1 章 入门   1 

    1.1 语言和库 1

    1.1.1 C++ 1

    1.1.2 OpenGL / GLSL 2

    1.1.3 窗口管理库 2

    1.1.4 扩展库 2

    1.1.5 数学库 3

    1.1.6 纹理图像加载库 3

    1.1.7 可选库 3

    1.2 安装和配置 3

    参考资料 4

    第 2 章 OpenGL 图像管线 5

    2.1 OpenGL 管线 5

    2.1.1 C++/OpenGL 应用程序 6

    2.1.2 顶点着色器和片段着色器 8

    2.1.3 曲面细分着色器 11

    2.1.4 几何着色器 11

    2.1.5 栅格化 12

    2.1.6 片段着色器 13

    2.1.7 像素操作 13

    2.2 检测 OpenGL 和 GLSL 错误 14

    2.3 从文件中读取 GLSL 源代码 16

    2.4 从顶点构建对象 17

    2.5 场景动画 18

    2.6 C++代码文件结构 19

    补充说明 20

    习题 21

    参考资料 21

    第 3 章 数学基础 22

    3.1 3D 坐标系统 22

    3.2 点 22

    3.3 矩阵 22

    3.4 变换矩阵 24

    3.4.1 平移矩阵 24

    3.4.2 缩放矩阵 25

    3.4.3 旋转矩阵 25

    3.5 向量 26

    3.5.1 点积的应用 27

    3.5.2 叉积的应用 28

    3.6 局部和世界空间 28

    3.7 视觉空间和合成相机 28

    3.8 投影矩阵 30

    3.8.1 透视投影矩阵 30

    3.8.2 正射投影矩阵 31

    3.9 LookAt 矩阵 32

    3.10 用来构建矩阵变换的 GLSL

    函数 32

    补充说明 33

    习题 34

    参考资料 34

    第 4 章 管理 3D 图形数据 35

    4.1 缓冲区和顶点属性 35

    4.2 统一变量 37

    4.3 顶点属性插值 37

    4.4 模型-视图和透视矩阵 38

    4.5 我们的第 一个3D程序—— 一个3D立方体 39

    4.6 渲染一个对象的多个副本 45

    实例化 45

    4.7 在同一个场景中渲染多个不同模型 47

    4.8 矩阵栈 49

    4.9 应对“Z 冲突”伪影 53

    4.10 图元的其他选项 54

    4.11 性能优先的编程方法 55

    4.11.1 尽量减少动态内存空间分配 55

    4.11.2 预先计算透视矩阵 55

    4.11.3 背面剔除 56

    补充说明 58

    习题 58

    参考资料 59

    第 5 章 纹理贴图 60

    5.1 加载纹理图像文件 60

    5.2 纹理坐标 61

    5.3 创建纹理对象 62

    5.4 构建纹理坐标 62

    5.5 将纹理坐标载入缓冲区 63

    5.6 在着色器中使用纹理:采样器变量和纹理单元 64

    5.7 纹理贴图:示例程序 64

    5.8 多级渐远纹理贴图 66

    5.9 各向异性过滤 69

    5.10 环绕和平铺 69

    5.11 透视变形 70

    5.12 材质—更多OpenGL细节 71

    补充说明 72

    习题 72

    参考资料 72

    第 6 章 3D 模型 74

    6.1 程序构建模型—构建一个球体 74

    6.2 OpenGL 索引—构建一个环面 79

    6.2.1 环面 79

    6.2.2 OpenGL 中的索引 79

    6.3 加载外部构建的模型 84

    补充说明 90

    习题 90

    参考资料 90

    第 7 章 光照 91

    7.1 光照模型 91

    7.2 光源 91

    7.3 材质 93

    7.4 ADS 光照计算 95

    7.5 实现 ADS 光照 96

    7.5.1 Gouraud 着色(双线性光强插值法) 97

    7.5.2 Phong 着色 101

    7.6 结合光照与纹理 105

    补充说明 106

    历史记录 106

    习题 107

    参考资料 107

    第 8 章 阴影 108

    8.1 阴影的重要性 108

    8.2 投影阴影 108

    8.3 阴影体 109

    8.4 阴影贴图 109

    8.4.1 阴影贴图(第 1 轮)—— 从光源位置“绘制”物体 110

    8.4.2 阴影贴图(中间步骤)——将 Z 缓冲区复制到纹理 111

    8.4.3 阴影贴图(第 2 轮)—— 渲染带阴影的场景 111

    8.5 阴影贴图示例 113

    8.6 阴影贴图的伪影 117

    8.7 柔和阴影 119

    8.7.1 现实世界中的柔和阴影 119

    8.7.2 生成柔和阴影——百分比邻近滤波(PCF) 120

    8.7.3 柔和阴影/PCF 程序 122

    补充说明 124

    习题 124

    参考资料 125

    第 9 章 天空和背景 126

    9.1 天空盒 126

    9.2 穹顶 127

    9.3 实现天空盒 128

    9.3.1 从头开始构建天空盒 128

    9.3.2 使用 OpenGL 立方体贴图 131

    9.4 环境贴图 133

    补充说明 136

    习题 137

    参考资料 137

    第 10 章 增强表面细节 138

    10.1 凹凸贴图 138

    10.2 法线贴图 139

    10.3 高度贴图 145

    补充说明 146

    习题 147

    参考资料 147

    第 11 章 参数曲面 148

    11.1 二次贝塞尔曲线 148

    11.2 三次贝塞尔曲线 149

    11.3 二次贝塞尔曲面 151

    11.4 三次贝塞尔曲面 152

    补充说明 153

    习题 153

    参考资料 153

    第 12 章 曲面细分 154

    12.1 OpenGL 中的曲面细分 154

    12.2 贝塞尔曲面细分 158

    12.3 地形、高度图的细分 162

    12.4 控制细节级别 166

    补充说明 168

    习题 168

    参考资料 168

    第 13 章 几何着色器 169

    13.1 OpenGL 中的逐个图元处理 169

    13.2 修改图元 170

    13.3 删除图元 172

    13.4 添加图元 173

    13.5 更改图元类型 175

    补充说明 176

    习题 176

    参考资料 176

    第 14 章 其他技术 177

    14.1 雾 177

    14.2 复合、混合、透明度 178

    14.3 用户定义剪裁平面 182

    14.4 3D 纹理 183

    14.5 噪声 187

    14.6 噪声应用——大理石 190

    14.7 噪声应用——木材 193

    14.8 噪声应用——云 195

    14.9 噪声应用——特殊效果 198

    补充说明 199

    习题 200

    参考资料 200

    第 15 章 模拟水面 202

    15.1 游泳池表面和底部的几何设定 202

    15.2 添加水面反射和折射 205

    15.3 添加水面波浪 212

    15.4 更多修正 213

    15.5 为水的流动添加动画 216

    15.6 水下焦散 218

    补充说明 219

    习题 220

    参考资料 220

    第 16 章 光线追踪和计算着色器 221

    16.1 计算着色器 222

    16.1.1 编译及使用计算着色器 222

    16.1.2 计算着色器中的并行计算 222

    16.1.3 工作组 225

    16.1.4 工作组详解 225

    16.1.5 工作组的限制 227

    16.2 光线投射 227

    16.2.1 定义 2D 纹理图像 228

    16.2.2 构建和显示光线投射图像 228

    16.2.3 光线与球面的交点 233

    16.2.4 轴对齐的光线与立方体的交点 234

    16.2.5 无光照的简单光线投射的输出 235

    16.2.6 添加 ADS 光照 235

    16.2.7 添加阴影 237

    16.2.8 非轴对齐的光线与立方体的交点 238

    16.2.9 确定纹理坐标 239

    16.2.10 平面交点和过程纹理 244

    16.3 光线追踪 246

    16.3.1 反射 246

    16.3.2 折射 247

    16.3.3 结合反射、折射和纹理 249

    16.3.4 增加光线数 250

    16.3.5 通用解决方案 254

    16.3.6 更多示例 257

    16.3.7 透明对象的颜色混合 260

    补充说明 264

    习题 265

    参考资料 265

    第 17 章 3D 眼镜和 VR 头显的立体视觉 267

    17.1 双目视图和投影矩阵 268

    17.2 色差式渲染 269

    17.3 并排式渲染 270

    17.4 修正头显的镜头畸变 271

    17.5 简单的测试硬件配置 276

    补充说明 277

    习题 277

    参考资料 277

    附录 A PC(Windows)上的安装与设置 279

    A.1 安装库和开发环境 279

    A.1.1 安装开发环境 279

    A.1.2 安装 OpenGL/GLSL 279

    A.1.3 准备 GLFW 279

    A.1.4 准备 GLEW 280

    A.1.5 准备 GLM 280

    A.1.6 准备 SOIL2 280

    A.1.7 准备共享的 lib 和include 文件夹 280

    A.2 在 MS Visual Studio 中开发和部署 OpenGL 项目 281

    创建 Visual Studio 自定义项目模板 281

    参考资料 282

    附录 B Mac(macOS)平台上的安装与设置 283

    B.1 安装库和开发环境 283

    B.1.1 准备并安装依赖库 283

    B.1.2 准备开发环境 284

    B.2 修改 Mac 的 C++/OpenGL/ GLSL 应用程序代码 285

    B.2.1 修改 C++代码 285

    B.2.2 修改 GLSL 代码 286

    参考资料 287

    附录 C 使用 Nsight 图形调试器 288

    C.1 关于 NVIDIA Nsight 288

    C.2 设置 Nsight 288

    C.3 在 Nsight 中运行 C++/OpenGL

    应用程序 289

    参考资料 291
查看详情
您可能感兴趣 / 更多
计算机图形学编程(使用OpenGL和C++)(第2版)
争吵的恋人:我们为什么相爱,又为什么争吵
[美]约翰·金,[美]瓦妮莎·贝内特
计算机图形学编程(使用OpenGL和C++)(第2版)
蒙特卡洛的密码锁(数学大师的逻辑课) 文教科普读物 [美]雷蒙德·m.斯穆里安(raymondm.smullyan)
[美]雷蒙德·m.斯穆里安(raymondm.smullyan)
计算机图形学编程(使用OpenGL和C++)(第2版)
福尔摩斯的棋盘:关于国际象棋的推理题(数学大师的逻辑课)
[美]雷蒙德·m.斯穆里安
计算机图形学编程(使用OpenGL和C++)(第2版)
《生命大设计.重构》(关于“生命创造现实”这一惊人事实,独特且完整的科学探索与哲学诠释)
[美]鲍勃·伯曼 著;杨泓 译;[美]罗伯特·兰札;马泰·帕夫希奇(斯洛文尼亚)
计算机图形学编程(使用OpenGL和C++)(第2版)
杰出投资者的底层认知:成功投资与明智创富的10个茅塞顿开之问(《聪明的投资者》新时代精华版)
[美]J.戴维·斯坦恩(J.David Stein) 著;刘寅龙 译;庞鑫
计算机图形学编程(使用OpenGL和C++)(第2版)
浴缸里的海洋
[美]塞思·菲什曼
计算机图形学编程(使用OpenGL和C++)(第2版)
新视界文库-生命故事:生物学上的伟大发现
[美]肖恩·B.卡罗尔
计算机图形学编程(使用OpenGL和C++)(第2版)
洛丽塔原型:小说《洛丽塔》背后的萨莉?霍纳绑架案
[美]萨拉·魏恩曼 著;真故图书 出品
计算机图形学编程(使用OpenGL和C++)(第2版)
托尔斯泰
[美]莉莎·克纳普(Liza Knapp)
计算机图形学编程(使用OpenGL和C++)(第2版)
奇迹之门 《纽约时报》畅销书作家写给孩子的一封“成长家书”。让父母的爱与肯定,成为孩子探索世界的底气。拥抱成长的不确定性,打开通向无限可能的“奇迹之门”。
[美]艾莉森·麦基/文 (美) 柳泰恩 图
计算机图形学编程(使用OpenGL和C++)(第2版)
全球通史(全六册)(另一个角度的“全球通史”,不一样的视野与新知。以地理为骨,历史为肉,一部超级丰满的世界通史。)
[美]塞缪尔·古德里奇 译者:冷惠玲、冯佳娜、王小忠、孙丽霞、李江艳
计算机图形学编程(使用OpenGL和C++)(第2版)
《星际争霸》动画影像艺术
[美]罗伯特·布鲁克斯