本篇主要提供深入理解OpenGLWebGL和OpenGLES图形软件计算机图形学OpenGL渲染技术混合电子书的pdf版本下载,本电子书下载方式为百度网盘方式,点击以上按钮下单完成后即会通过邮件和网页的方式发货,有问题请联系邮箱ebook666@outlook.com
商品基本信息,请以下列介绍为准 | |
图书名称: | 深入理解OpenGL、WebGL和OpenGL ES |
作者: | [美]帕特里克·科齐(Patrick Cozzi) [美]克里斯托弗·里奇奥(Christophe Riccio) 武海军 译 |
定价: | 199.00 |
ISBN号: | 9787302552253 |
出版社: | 清华大学出版社 |
编辑推荐 | |
随着OpenGL、OpenGL ES和WebGL的广泛使用,我们认识到使用这些API的开发人员需要相互学习,而不仅仅是基础知识的交流。为此,我们创建了OpenGL Insights系列,第一卷的作者包含开发人员、硬件供应商、研究人员和教育工作者。它既是对OpenGL系列API广泛使用的献礼,也包含一系列总结现有实用技术和深入探讨未来发展的文章。 本书内容丰富,主题多样,从在课堂上使用OpenGL到*新扩展的介绍,再到优化移动设备和设计WebGL库,可谓应有尽有。许多章节还具有一定的技术深度,例如,异步缓冲和纹理传输、性能状态跟踪和可编程顶点拉动等。 |
内容简介 | |
本书详细阐述了与OpenGL相关的基本解决方案,主要包括渲染技术、混合管线、性能、传输、调试和性能分析、软件设计等内容。此外,本书还提供了相应的示例,以帮助读者进一步理解相关方案的实现过程。 本书适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学教材和参考手册。 |
目录 | |
第1篇 发 现 第1章 基于着色器的OpenGL计算机图形学课程 3 1.1 简介 3 1.2 基础课程 4 1.3 简单的OpenGL示例 4 1.4 从可编程管线开始 7 1.5 新的简单示例 8 1.5.1 OpenGL ES和WebGL 11 1.5.2 第一项作业 11 1.6 课程的其余部分 11 1.6.1 几何 12 1.6.2 变换和视图 12 1.6.3 照明和着色 13 1.6.4 纹理和离散处理 14 1.6.5 高级主题 14 1.6.6 问题 15 1.7 小结 16 致谢 17 参考文献 17 第2章 过渡到新OpenGL版本 19 2.1 概述 19 2.2 命名着色器变量:简介 19 2.3 命名着色器变量:详细信息 20 2.4 索引顶点缓冲区对象C++类 22 2.4.1 使用注意事项 22 2.4.2 示例代码 23 2.4.3 实现说明 25 2.5 GLSLProgram C++类 26 2.5.1 使用注意事项 26 2.5.2 示例代码 27 2.5.3 实现说明 28 2.6 小结 28 参考文献 29 第3章 适用于OpenGL开发人员的WebGL 31 3.1 简介 31 3.2 WebGL的优势 31 3.2.1 零要求 32 3.2.2 跨平台 32 3.2.3 跨设备 32 3.2.4 易开发 34 3.2.5 强大的工具支持 35 3.2.6 性能 36 3.3 安全性 38 3.3.1 跨源请求 39 3.3.2 上下文丢失 41 3.4 部署着色器 41 3.5 关于语言 42 3.5.1 类型 43 3.5.2 动态类型 45 3.5.3 函数范围 45 3.5.4 函数编程 46 3.5.5 原型对象 47 3.5.6 this关键字 48 3.5.7 代码组织 50 3.5.8 常见错误 51 3.6 资源 51 参考文献 52 第4章 将移动应用程序移植到WebGL 53 4.1 简介 53 4.2 跨平台的OpenGL 53 4.3 入门 54 4.3.1 初始化OpenGL ES上下文 54 4.3.2 加载着色器 55 4.3.3 绘制顶点 56 4.4 加载纹理 57 4.4.1 分配纹理 57 4.4.2 处理异步加载 59 4.5 相机和矩阵 60 4.5.1 对比float和Float32Array 60 4.5.2 将矩阵传递给着色器 60 4.6 控制 61 4.6.1 触摸事件 61 4.6.2 在相机和碰撞中使用触摸事件 62 4.7 其他考虑因素 63 4.7.1 动画 63 4.7.2 继承 63 4.8 维护 64 4.8.1 调试 64 4.8.2 性能分析 65 4.8.3 性能和采用 65 4.9 小结 66 参考文献 67 第5章 GLSL着色器接口 69 5.1 简介 69 5.2 变量和块 69 5.2.1 用户定义的变量和块 69 5.2.2 内置变量和块 71 5.3 位置 72 5.3.1 定义 72 5.3.2 计算位置 73 5.3.3 位置限制 74 5.4 匹配接口 76 5.4.1 部分和完全匹配 76 5.4.2 类型匹配 78 5.4.3 按名称和位置匹配 80 5.4.4 按块匹配 81 5.4.5 按结构匹配 83 5.4.6 链接和单独的程序 86 5.5 使用语义 87 5.5.1 编译器生成的变化的位置和显式位置 87 5.5.2 顶点数组属性和顶点着色器输入 87 5.5.3 片段着色器输出和帧缓冲区颜色附加数据 89 5.5.4 变化的输出和变化的输入 90 5.5.5 统一格式缓冲区和统一格式块 91 5.6 仅适用于调试的应用程序端验证 92 5.6.1 顶点输入验证 93 5.6.2 变化的接口验证 93 5.6.3 片段输出验证 93 5.6.4 变量验证 94 5.6.5 统一格式块验证 94 5.7 小结 95 致谢 96 参考文献 96 第6章 曲面细分着色器简介 97 6.1 简介 97 6.1.1 细分表面 97 6.1.2 平滑多边形数据 98 6.1.3 GPU计算 98 6.1.4 曲线、头发和草地 98 6.1.5 其他用途 99 6.2 新的着色管道 99 6.2.1 图块的生命 101 6.2.2 线程模型 102 6.2.3 输入和输出 103 6.2.4 曲面细分控制着色器 104 6.2.5 曲面细分评估着色器 107 6.2.6 使用quads生成图元 108 6.2.7 使用triangles生成图元 109 6.3 对茶壶进行曲面细分 110 6.4 等值线和螺旋 113 6.5 结合其他OpenGL功能 114 参考文献 115 第7章 GLSL中的程序纹理 117 7.1 简介 117 7.2 简单函数 118 7.3 抗锯齿 120 7.4 Perlin噪声 121 7.5 Worley噪声 124 7.6 动画 127 7.7 纹理图像 127 7.8 性能 130 7.9 小结 131 参考文献 131 第8章 基于OpenGL和OpenGL ES的OpenGL SC仿真 133 8.1 简介 133 8.2 OpenGL SC实现 134 8.3 设计和实现 138 8.3.1 总体管线 138 8.3.2 纹理管线 140 8.4 结果 142 8.5 小结 143 参考文献 144 第9章 混合图形和使用多个GPU进行计算 147 9.1 简介 147 9.2 API级别的图形和计算互操作性 147 9.2.1 互操作性准备 147 9.2.2 OpenGL对象交互 149 9.3 系统级的图形和计算互操作性 151 9.4 小结 155 参考文献 156 第2篇 渲 染 技 术 第10章 GPU曲面细分:地形LOD讨论 159 10.1 简介 159 10.2 使用OpenGL GPU曲面细分渲染地形 159 10.3 动态LOD的简单方法 163 10.4 粗糙度和细节 166 10.5 渲染测试 168 10.5.1 测试设置 168 10.5.2 评估LOD解决方案的质量 169 10.5.3 性能 172 10.6 小结 176 参考文献 177 第11章 使用基于着色器的抗锯齿体积线 179 11.1 简介 179 11.2 后处理抗锯齿 180 11.3 抗锯齿体积线 180 11.3.1 使用顶点着色器进行几何体挤出 181 11.3.2 使用几何着色器进行几何体挤出 183 11.4 性能 185 11.5 小结 186 参考文献 186 第12章 通过距离场渲染2D形状 189 12.1 简介 189 12.2 方法概述 190 12.3 更好的距离场算法 191 12.4 距离纹理 192 12.5 硬件加速距离变换 192 12.6 片段渲染 193 12.7 特效 195 12.8 性能 195 12.9 缺点 196 12.10 小结 197 参考文献 197 第13章 WebGL中的高效文本渲染 199 13.1 简介 199 13.2 基于画布的字体渲染 199 13.2.1 HTML5 Canvas 199 13.2.2 概念 200 13.2.3 实现 200 13.3 位图字体渲染 202 13.3.1 概念 202 13.3.2 创建位图字体 204 13.3.3 实现 204 13.4 对比 206 13.4.1 性能 207 13.4.2 内存使用情况 209 13.4.3 开发难度 210 13.5 小结 210 参考文献 211 第14章 分层纹理渲染管线 213 14.1 简介 213 14.1.1 术语 214 14.1.2 在Blender软件中的纹理 214 14.2 分层管线 215 14.2.1 关于G缓冲区创建 215 14.2.2 层解决方案 216 14.2.3 统一的视差偏移 218 14.2.4 照明 219 14.3 实现和结果 219 14.3.1 实现 219 14.3.2 结果 220 14.4 小结 221 参考文献 221 第15章 景深与模糊渲染 223 15.1 简介 223 15.2 景深现象 224 15.3 相关工作 227 15.4 算法 227 15.4.1 概述 227 15.4.2 模糊圈的计算 228 15.4.3 散景检测 229 15.4.4 基于模糊的景深 232 15.4.5 散景渲染 232 15.5 结果 234 15.6 讨论 235 15.7 小结 236 参考文献 236 第16章 阴影代理 239 16.1 简介 239 16.2 对阴影代理的剖析 241 16.3 设置管线 242 16.4 启用ShadowProxy的片段着色器 244 16.5 调整阴影体积 246 16.6 性能 246 16.7 小结 248 参考文献 248
第3篇 混 合 管 线 第17章 使用变换反馈的基于物理学的实时变形 251 17.1 简介 251 17.2 硬件支持和变换反馈的演变 252 17.3 变换反馈的机制 253 17.4 数学模型 254 17.5 实现 258 17.5.1 使用Verlet积分顶点着色器 258 17.5.2 注册属性以变换反馈 260 17.5.3 数组缓冲区和缓冲区对象设置 261 17.5.4 数据的动态修改 263 17.6 实验结果和比较 264 17.7 小结 265 参考文献 265 第18章 GPU上的分层深度剔除和包围盒管理 267 18.1 简介 267 18.2 管线 268 18.2.1 早期深度通道 270 18.2.2 深度LOD构造 271 18.2.3 包围盒更新 272 18.2.4 分层深度剔除 274 18.2.5 包围盒调试绘图 275 18.3 操作顺序 276 18.4 实验结果 277 18.5 小结 279 参考文献 279 第19章 使用分层渲染的大量阴影 281 19.1 简介 281 19.2 在OpenGL中的传统阴影贴图渲染技术 282 19.3 阴影贴图生成算法 285 19.4 性能 287 19.4.1 使用复杂顶点着色器的性能 291 19.4.2 视锥体剔除优化 293 19.4.3 背面剔除优化 296 19.5 高级技术 298 19.6 局限性 299 19.7 小结 300 参考文献 301 第20章 高效的分层片段缓冲区技术 303 20.1 简介 303 20.2 相关工作 304 20.3 链表LFB 306 20.4 线性化LFB 307 20.5 性能结果 310 20.6 小结 314 参考文献 315 第21章 可编程顶点拉动 317 21.1 简介 317 21.2 实现 317 21.3 性能 320 21.4 应用 322 21.5 局限性 323 21.6 小结 324 参考文献 324 第22章 使用GPU硬件光栅化器进行基于八叉树的稀疏体素化 327 22.1 简介 327 22.2 以前的工作成果 328 22.3 关于GLSL中的无限制内存访问 329 22.4 简单的体素化管线 330 22.4.1 保守光栅化 332 22.4.2 组合体素片段 333 22.4.3 结果 335 22.5 稀疏体素化为八叉树 336 22.5.1 八叉树结构 337 22.5.2 稀疏体素化概述 337 22.5.3 使用原子计数器进行体素-片段列表构建 338 22.5.4 节点细分 339 22.5.5 写入和Mipmap值 340 22.5.6 使用间接绘图实现无同步内核启动 340 22.5.7 结果与讨论 341 22.6 小结 342 致谢 342 参考文献 342 第4篇 性 能 第23章 基于图块架构的性能调优 347 23.1 简介 347 23.2 背景 348 23.3 清除和丢弃帧缓冲区 351 23.4 增量帧更新 352 23.5 冲洗 353 23.6 延迟 354 23.7 隐藏表面消除 356 23.8 混合 357 23.9 多重采样 357 23.10 性能分析 358 23.11 小结 359 参考文献 359 第24章 探索移动与桌面OpenGL性能 361 24.1 简介 361 24.2 重要的差异和约束 361 24.2.1 尺寸差异 361 24.2.2 渲染架构差异 362 24.2.3 内存架构差异 363 24.3 减少内存带宽 364 24.3.1 相对显示尺寸 365 24.3.2 帧缓冲区带宽 365 24.3.3 抗锯齿 366 24.3.4 纹理带宽 367 24.3.5 纹理过滤和带宽 368 24.4 减少片段工作负载 368 24.4.1 过度绘制和混合 368 24.4.2 全屏效果 370 24.4.3 屏幕外通道 371 24.4.4 修剪片段工作 372 24.5 顶点着色 372 24.6 小结 373 参考文献 374 第25章 通过减少对驱动程序的调用来提高性能 377 25.1 简介 377 25.2 高效的OpenGL状态使用 377 25.2.1 检测冗余状态修改 378 25.2.2 有效状态修改的一般方法 378 25.3 批处理和实例化 381 25.3.1 批处理 381 25.3.2 关于OpenGL实例化 383 25.4 小结 386 致谢 386 参考文献 387 第26章 索引多个顶点数组 389 26.1 简介 389 26.2 问题 389 26.3 算法 392 26.4 顶点比较方法 393 26.4.1 关于If/Then/Else版本 393 26.4.2 关于memcmp()版本 394 26.4.3 哈希函数 394 26.5 性能 395 26.6 小结 397 参考文献 397 第27章 NVIDIA Quadro上的多GPU渲染 399 27.1 简介 399 27.2 以前的扩展方法 400 27.3 指定特定GPU进行渲染 401 27.4 优化GPU之间的数据传输 406 27.5 多GPU的应用结构 407 27.6 并行渲染方法 410 27.6.1 先排序图像分解 410 27.6.2 后排序数据分解 411 27.6.3 立体渲染 412 27.6.4 服务器端渲染 412 27.7 小结 413 参考文献 413 第5篇 传 输 第28章 异步缓冲区传输 417 28.1 简介 417 28.2 缓冲区对象 418 28.2.1 内存传输 418 28.2.2 使用提示 421 28.2.3 隐式同步 422 28.2.4 同步原语 423 28.3 上传 424 28.3.1 轮询(多个缓冲区对象) 424 28.3.2 缓冲区重新指定(孤立) 425 28.3.3 非同步缓冲区 427 28.3.4 关于AMD_pinned_memory扩展 429 28.4 下载 429 28.5 复制 432 28.6 多线程和共享上下文 432 28.6.1 多线程OpenGL简介 433 28.6.2 同步问题 434 28.6.3 内部同步导致的性能损失 434 28.6.4 关于共享上下文的总结 435 28.7 使用方案 436 28.7.1 方法1:单线程 436 28.7.2 方法2:两个线程和一个OpenGL上下文 437 28.7.3 方法3:两个线程和两个OpenGL共享上下文 439 28.7.4 性能比较 439 28.8 小结 441 参考文献 442 第29章 费米异步纹理传输 443 29.1 简介 443 29.2 关于OpenGL命令缓冲区执行 445 29.3 当前纹理传输方法 446 29.3.1 同步纹理传输 447 29.3.2 CPU异步纹理传输 448 29.4 GPU异步纹理传输 450 29.5 实现细节 452 29.5.1 多个OpenGL上下文 452 29.5.2 同步 453 29.5.3 复制引擎注意事项 455 29.6 结果与分析 455 29.7 小结 460 参考文献 460 第30章 WebGL模型:端到端 461 30.1 简介 461 30.2 关于3D模型的生命周期 462 30.2.1 第1阶段:管线 462 30.2.2 第2阶段:服务 463 30.2.3 第3阶段:加载 465 30.2.4 第4阶段:渲染 468 30.3 整体一致性 472 30.3.1 Delta编码 473 30.3.2 Delta编码分析 474 30.3.3 ZigZag编码 475 30.3.4 Delta+ZigZag编码分析 476 30.3.5 压缩管线 477 30.4 主要改进 478 30.4.1 交错和转置的对比 478 30.4.2 高水位线预测 479 30.4.3 性能 482 30.4.4 未来的工作 482 30.5 小结 483 致谢 483 参考文献 484 第31章 使用实时纹理压缩进行游戏内视频捕捉 485 31.1 简介 485 31.2 DXT压缩概述 485 31.3 DXT压缩算法 486 31.4 转换为YUV格式颜色空间 488 31.5 比较 490 31.6 对程序内容和视频捕捉使用实时DXT压缩 492 31.6.1 使用YUYV-DXT压缩的视频捕捉 492 31.6.2 带宽因素 493 31.6.3 视频流的格式 493 31.6.4 从GPU下载视频帧 495 31.7 小结 495 参考文献 496 第32章 OpenGL友好几何文件格式及其Maya导出器 497 32.1 简介 497 32.2 背景知识 497 32.2.1 目标和特性 497 32.2.2 现有格式 499 32.3 关于Drone格式 499 32.3.1 二进制布局 499 32.3.2 Drone API 501 32.3.3 场景API 503 32.4 编写Maya文件转换器 504 32.4.1 Maya SDK基础知识 504 32.4.2 编写转换器 505 32.4.3 遍历Maya DAG 506 32.4.4 导出可供OpenGL使用的网格 506 32.5 结果 507 32.6 小结 509 参考文献 510 第6篇 调试和性能分析 第33章 开发人员的强力臂助:ARB_debug_output 513 33.1 简介 513 33.2 公开扩展 513 33.3 使用回调函数 514 33.4 通过事件原因排序 515 33.5 访问消息日志 516 33.6 将自定义用户事件添加到日志中 517 33.7 控制事件输出量 518 33.8 防止对最终版本的影响 519 33.9 巨头之间的争斗:实现策略 520 33.10 关于调试的进一步思考 521 33.11 小结 521 参考文献 522
第34章 OpenGL计时器查询 523 34.1 简介 523 34.2 测量OpenGL执行时间 524 34.2.1 关于OpenGL时间 525 34.2.2 同步计时器查询 525 34.2.3 异步计时器查询 526 34.2.4 异步时间戳查询 528 34.2.5 考虑查询检索 530 34.3 小结 531 参考文献 532 第35章 实时性能分析工具 533 35.1 简介 533 35.2 范围和要求 533 35.3 工具设计 534 35.3.1 用户界面 534 35.3.2 限制和解决方法 535 35.3.3 应用程序编程接口 535 35.4 实现 536 35.4.1 测量CPU上的时间 536 35.4.2 测量GPU上的时间 537 35.4.3 数据结构 537 35.4.4 标记管理 539 35.5 使用性能分析程序 540 35.5.1 使用级别 540 35.5.2 确定应测量的内容 541 35.5.3 艺术设计师 542 35.5.4 局限性 542 35.6 小结 542 参考文献 543 第36章 浏览器图形分析和优化 545 36.1 简介 545 36.2 发光效果的阶段 545 36.3 发光效果的开销 547 36.4 分析WebGL应用程序 548 36.4.1 近乎原生的图形层引擎 548 36.4.2 性能分析 549 36.4.3 WebGL Inspector 550 36.4.4 英特尔图形性能分析器 550 36.5 Windows上的分析工作流程 551 36.6 优化发光效果 554 36.6.1 较低的渲染目标分辨率 555 36.6.2 不必要的Mipmap生成 556 36.6.3 浮点帧缓冲区 557 36.7 小结 558 参考文献 559 第37章 性能状态跟踪 561 37.1 简介 561 37.2 功耗策略 561 37.3 使用NVAPI进行P状态跟踪 562 37.3.1 关于GPU利用率 563 37.3.2 读取P状态 564 37.4 使用ADL进行P状态跟踪 566 37.5 小结 567 参考文献 567 第38章 图形内存使用情况监控 569 38.1 简介 569 38.2 图形内存分配 569 38.3 查询NVIDIA显卡的内存状态 570 38.4 查询AMD显卡的内存状态 571 38.5 小结 573 参考文献 573
第7篇 软 件 设 计 第39章 ANGLE项目:在Direct3D上实现OpenGL ES 2.0 577 39.1 简介 577 39.2 背景 577 39.3 实现 578 39.3.1 坐标系 579 39.3.2 着色器编译器和链接器 583 39.3.3 顶点和索引缓冲区 587 39.3.4 纹理 588 39.3.5 顶点纹理提取 591 39.3.6 图元类型 591 39.3.7 蒙版清除 592 39.3.8 单独的深度和模板缓冲区 592 39.3.9 同步 593 39.3.10 多重采样 593 39.3.11 多个上下文和资源共享 594 39.3.12 上下文丢失 595 39.3.13 资源限制 596 39.3.14 优化 597 39.3.15 推荐做法 598 39.3.16 性能结果 599 39.4 未来工作 600 39.5 小结 600 39.6 源代码 600 致谢 600 参考文献 601 第40章 SceneJS:基于WebGL的场景图形引擎 603 40.1 简介 603 40.2 有效抽象WebGL 604 40.2.1 绘制列表编译 609 40.2.2 状态排序 610 40.3 优化场景 611 40.3.1 纹理图集 611 40.3.2 VBO共享 611 40.3.3 可共享的节点核心 612 40.4 拾取 614 40.5 小结 614 参考文献 614 第41章 SpiderGL中的特性和设计选择 617 41.1 简介 617 41.2 库架构 617 41.3 表示3D对象 619 41.4 直接访问WebGL对象状态 624 41.4.1 问题 625 41.4.2 解决方案 626 41.4.3 使用SGL_current_binding 628 41.4.4 使用SGL_direct_state_access 630 41.4.5 缺点 632 41.5 WebGLObject包装器 633 41.6 小结 637 致谢 637 参考文献 637 第42章 Web上的多模态交互式模拟 639 42.1 简介 639 42.2 关于Π-SoFMIS模块的设计和定义 639 42.3 框架实现 641 42.3.1 模态 642 42.3.2 着色器 642 42.3.3 文件格式 642 42.4 渲染模块 643 42.5 模拟模块 646 42.6 硬件模块 647 42.7 案例研究:LAGB模拟器 649 42.8 小结 655 参考文献 655 第43章 使用OpenGL和OpenGL ES的子集方法 657 43.1 简介 657 43.2 使陈旧的代码现代化 658 43.2.1 立即模式和顶点属性数组 658 43.2.2 图元选择 660 43.2.3 位图和多边形点画 660 43.3 保持代码在API变体中的可维护性 662 43.3.1 顶点和片段处理 662 43.3.2 GLX和EGL 663 43.3.3 顶点数组对象 663 43.3.4 线框模式 664 43.3.5 纹理包装模式 664 43.3.6 非2的n次幂 666 43.3.7 图像格式和类型 667 43.3.8 图像布局 668 43.3.9 着色语言 668 43.4 特定功能的代码块 669 43.5 小结 669 参考文献 670 第44章 构建跨平台应用程序 671 44.1 简介 671 44.2 使用实用程序库 673 44.2.1 使用GLUT的示例 673 44.2.2 使用Qt的示例 674 44.2.3 使用EGL的示例 675 44.3 与OpenGL版本无关的代码 676 44.4 配置空间 679 44.5 关于Metabuilds和CMake 680 44.6 关于CMake和配置空间 681 44.7 关于CMake和平台细节 684 44.7.1 平台:Windows 685 44.7.2 平台:Mac OS X 685 44.7.3 平台:iOS 686 44.8 小结 690 参考文献 690 |