| 作者 |
| 丛书名 |
| 出版社 |
| 人民邮电出版社 |
| ISBN |
| 9787115509390 |
| 简要 |
| 简介 |
| 内容简介书籍计算机书籍 本书共分为19章,介绍了Vulkan的诞生、特点、开发环境的搭建以及运行机制、渲染管线和调试技术,着色器编程语言—GLSL、投影及各种变换、光照、纹理映射、3D模型的加载、混合与雾、两种测试及片元丢弃、顶点着色器的妙用、片元着色器的妙用、真实光学环境的模拟、阴影及高级光照、几种高级着色器特效、骨骼动画、Vulkan的性能优化等,*后以一个休闲游戏—方块历险记的案例来展示Vulkan的功能与技术。本书按照必知必会的基础知识、基于Vulkan实现基本特效以及高级特效、完整游戏案例的顺序,循序渐进地进行详细讲解,适合不同需求、不同水平层次的各类读者。为了便于读者学习,随书提供了书中所有案例的完整源代码(书中所有案例都给出了安卓版和Windows版,*后的大案例还进一步给出了macOS、iOS和Linux版),*限度地帮助读者快速地掌握各方面的开发技术。 本书适合游戏开发者、程序员学习,也可以作为大专院校相关专业的师生学习用书和培训学校的教材。 |
| 目录 |
第1章 初识Vulkan 1 1.1 Vulkan概览 1 1.1.1 Vulkan简介 1 1.1.2 支持Vulkan的游戏概览 2 1.2 搭建开发环境 4 1.2.1 Android平台开发环境的配置 4 1.2.2 Windows平台开发环境的配置 8 1.3 第一个Vulkan程序 15 1.3.1 案例的运行效果 15 1.3.2 Vulkan应用程序的基本架构 15 1.3.3 3色三角形案例相关类的介绍 20 1.3.4 Vulkan中的常用方法 22 1.3.5 MyVulkanManager类的 基本结构 28 1.3.6 创建Vulkan实例 31 1.3.7 获取物理设备列表 32 1.3.8 创建逻辑设备 32 1.3.9 创建命令缓冲 33 1.3.10 获取设备中支持图形 工作的队列 35 1.3.11 初始化交换链 35 1.3.12 创建深度缓冲 41 1.3.13 创建渲染通道 43 1.3.14 创建帧缓冲 46 1.3.15 创建绘制用物体 47 1.3.16 初始化渲染管线 51 1.3.17 创建栅栏和初始化呈现信息 62 1.3.18 初始化基本变换矩阵、 摄像机矩阵、投影矩阵 63 1.3.19 执行绘制 63 1.3.20 销毁相关对象 66 1.3.21 整体流程的执行 67 1.3.22 顶点着色器和片元着色器 68 1.4 Vulkan中立体物体的构建 70 1.5 本章小结 71 第2章 渲染管线和调试技术 72 2.1 渲染管线 72 2.2 着色器的预编译 79 2.3 Vulkan调试技术 81 2.4 Vulkan GPU大PK 89 2.4.1 移动端GPU的4大家族 89 2.4.2 PC端GPU中3大家族 91 2.5 本章小结 92 第3章 着色器编程语言——GLSL 93 3.1 着色语言概述 93 3.2 着色语言基础 94 3.2.1 数据类型概述 94 3.2.2 数据类型的基本使用 98 3.2.3 运算符 100 3.2.4 各个数据类型的构造函数 102 3.2.5 类型转换 104 3.2.6 存储限定符 104 3.2.7 插值限定符 107 3.2.8 一致块 108 3.2.9 layout限定符 109 3.2.10 流程控制 111 3.2.11 函数的声明和使用 113 3.2.12 片元着色器中浮点及整型 变量精度的指定 114 3.2.13 程序的基本结构 114 3.3 特殊的内建变量 115 3.3.1 顶点着色器中的内建变量 115 3.3.2 片元着色器中的内建变量 116 3.3.3 内建常量 117 3.4 着色语言的内置函数 117 3.4.1 角度转换与三角函数 118 3.4.2 指数函数 119 3.4.3 常见函数 120 3.4.4 几何函数 123 3.4.5 矩阵函数 124 3.4.6 向量关系函数 125 3.4.7 纹理采样函数 126 3.4.8 微分函数 129 3.4.9 浮点数打包与解包函数 129 3.5 用invariant修饰符避免值变 问题 130 3.6 预处理器 131 3.7 本章小结 132 第4章 投影与各种变换 133 4.1 矩阵相关类的介绍 133 4.1.1 矩阵数学计算类—Matrix 133 4.1.2 矩阵状态管理 类—MatrixState3D 134 4.2 摄像机的设置 137 4.3 两种投影方式 138 4.3.1 正交投影 138 4.3.2 透视投影 144 4.3.3 推送常量 146 4.4 各种变换 148 4.4.1 基本变换的相关数学知识 148 4.4.2 平移变换 149 4.4.3 旋转变换 150 4.4.4 缩放变换 151 4.4.5 基本变换的实质 152 4.5 所有变换的完整流程 153 4.6 绘制方式 156 4.6.1 各种绘制方式概览 156 4.6.2 点与线段绘制方式 158 4.6.3 三角形条带与扇面绘制方式 161 4.6.4 索引法绘制 164 4.7 设置合理的视角 169 4.8 设置合理的投影参数 174 4.9 深度偏移 178 4.10 卷绕和背面剪裁 181 4.10.1 基本知识 181 4.10.2 一个简单的案例 182 4.11 间接绘制 183 4.11.1 背景知识 184 4.11.2 顶点法间接绘制 184 4.11.3 索引法间接绘制 186 4.12 本章小结 188 第5章 光照 189 5.1 曲面物体的构建 189 5.1.1 球体构建的基本原理 189 5.1.2 案例效果概览 190 5.1.3 开发步骤 190 5.2 基本光照效果 194 5.2.1 光照的基本模型 194 5.2.2 环境光 195 5.2.3 散射光 199 5.2.4 镜面光 205 5.2.5 3种光照通道的合成 210 5.3 定位光与定向光 212 5.4 点法向量和面法向量 215 5.5 光照的每顶点计算与每片元计算 218 5.6 本章小结 223 第6章 纹理映射 224 6.1 初识纹理映射 224 6.2 一个简单的案例 225 6.2.1 开发前的准备工作 225 6.2.2 纹理相关类 226 6.2.3 案例代码的开发 241 6.2.4 图像的瓦片组织方式 248 6.2.5 色彩通道的灵活组合 250 6.3 纹理拉伸 251 6.3.1 四种拉伸方式概览 251 6.3.2 不同拉伸方式的案例 254 6.4 纹理采样 259 6.4.1 纹理采样概述 259 6.4.2 最近点采样 259 6.4.3 线性纹理采样 260 6.4.4 MIN与MAG采样 261 6.4.5 不同纹理采样方式的案例 262 6.5 Mipmap纹理 266 6.5.1 基本原理 266 6.5.2 一个简单的案例 268 6.6 多重纹理与过程纹理 272 6.6.1 案例概览 273 6.6.2 将2D纹理映射到球面上的 策略 273 6.6.3 案例的场景结构 274 6.6.4 开发过程 275 6.7 压缩纹理的使用 283 6.7.1 Android平台下的压缩纹理 284 6.7.2 PC中Windows平台下的 压缩纹理 286 6.8 点精灵 289 6.8.1 基本知识 289 6.8.2 一个简单的案例 289 6.9 3D纹理 292 6.9.1 3D棋盘纹理的准备 293 6.9.2 3D棋盘纹理案例的开发 294 6.10 2D纹理数组 297 6.10.1 2D纹理数组的准备 297 6.10.2 2D纹理数组案例的开发 298 6.11 各向异性过滤 302 6.11.1 背景知识 303 6.11.2 一个简单的案例 303 6.12 本章小结 305 第7章 更逼真的场景——3D模型的加载 306 7.1 obj模型文件概述 306 7.1.1 obj文件的格式 306 7.1.2 用3ds Max设计3D模型 307 7.2 加载obj文件 308 7.2.1 加载仅有顶点坐标数据与 面数据的obj文件 308 7.2.2 加载后自动计算面法向量 312 7.2.3 加载后自动计算平均法向量 315 7.2.4 加载纹理坐标 317 7.2.5 加载顶点法向量 320 7.3 双面光照 321 7.4 本章小结 324 第8章 独特的场景渲染技术—— 混合与雾 325 8.1 混合技术 325 8.1.1 基本知识 325 8.1.2 源因子和目标因子 326 8.1.3 简单混合效果的案例 328 8.2 地月系云层效果的实现 330 8.3 雾 333 8.3.1 雾的原理与优势 333 8.3.2 雾的简单实现 334 8.4 本章小结 336 第9章 常用3D开发小技巧 337 9.1 标志板 337 9.1.1 案例效果与基本原理 337 9.1.2 开发步骤 338 9.2 灰度图地形 341 9.2.1 基本原理 341 9.2.2 开发前的准备工作 342 9.2.3 普通灰度图地形 342 9.2.4 过程纹理地形 344 9.2.5 Mipmap地形 347 9.2.6 顶点着色器采样纹理地形 351 9.3 高真实感地形 353 9.3.1 基本思路 353 9.3.2 地形设计工具EarthSculptor的 使用 354 9.3.3 一个简单的案例 356 9.4 天空盒与天空穹 358 9.4.1 天空盒 358 9.4.2 天空穹 359 9.4.3 天空盒与天空穹的使用技巧 361 9.5 简单镜像效果 361 9.5.1 基本原理 361 9.5.2 基本效果案例 362 9.5.3 升级效果案例 364 9.6 非真实感绘制 366 9.6.1 基本原理与案例效果 366 9.6.2 具体开发步骤 368 9.7 描边效果的实现 370 9.7.1 沿法线挤出轮廓 370 9.7.2 视空间中挤出 373 9.8 本章小结 374 第10章 两种测试及片元丢弃 375 10.1 剪裁测试 375 10.1.1 基本原理与核心代码 375 10.1.2 一个简单的案例 375 10.2 模板测试 377 10.2.1 基本原理 377 10.2.2 一个简单的案例 380 10.3 片元丢弃操作 383 10.4 任意剪裁平面 385 10.4.1 基本原理 385 10.4.2 茶壶被任意平面剪裁的 案例 386 10.5 本章小结 387 第11章 顶点着色器的妙用 388 11.1 飘扬的旗帜 388 11.1.1 基本原理 388 11.1.2 开发步骤 389 11.2 扭动的软糖 392 11.2.1 基本原理 392 11.2.2 开发步骤 393 11.3 风吹椰林场景的开发 394 11.3.1 椰子树随风摇摆的 基本原理 395 11.3.2 开发步骤 396 11.4 展翅飞翔的雄鹰 400 11.4.1 基本原理 400 11.4.2 开发步骤 400 11.5 二维扭曲 402 11.5.1 基本原理 403 11.5.2 开发步骤 403 11.6 吹气膨胀特效 406 11.6.1 基本原理 406 11.6.2 开发步骤 406 11.7 本章小结 407 第12章 片元着色器的妙用 408 12.1 程序纹理技术 408 12.1.1 砖块着色器 408 12.1.2 沙滩球着色器 410 12.2 数字图像处理 411 12.2.1 卷积的基本知识 411 12.2.2 平滑过滤 412 12.2.3 边缘检测 413 12.2.4 锐化处理 414 12.2.5 浮雕效果 414 12.2.6 图像渐变 415 12.2.7 卡通渲染 416 12.3 分形着色器 418 12.3.1 曼德布罗集简介 418 12.3.2 曼德布罗集着色器的实现 419 12.3.3 将曼德布罗集纹理应用到 实际物体上 421 12.3.4 茱莉亚集着色器的实现 421 12.4 3D纹理的妙用 423 12.4.1 噪声函数的基础知识 423 12.4.2 柏林噪声生成工具 426 12.4.3 3D噪声木纹理茶壶的 开发 427 12.5 体积雾 429 12.5.1 基本原理 429 12.5.2 开发步骤 430 12.6 粒子系统火焰的开发 431 12.6.1 火焰的基本原理 431 12.6.2 普通版火焰 433 12.6.3 点精灵版火焰 441 12.7 本章小结 444 第13章 真实光学环境的模拟 445 13.1 反射环境模拟 445 13.1.1 案例效果与基本原理 445 13.1.2 开发前的准备工作 446 13.1.3 开发步骤 447 13.2 折射环境模拟 449 13.2.1 案例效果与基本原理 449 13.2.2 开发步骤 450 13.3 色散效果模拟 452 13.3.1 案例效果与基本原理 452 13.3.2 开发步骤 452 13.4 菲涅尔效果的模拟 453 13.4.1 案例效果与基本原理 453 13.4.2 开发步骤 454 13.5 凹凸映射 455 13.5.1 案例效果与基本原理 455 13.5.2 法向量纹理图的生成 456 13.5.3 切向量的计算 458 13.5.4 案例的开发 459 13.6 镜头光晕 464 13.6.1 案例效果与基本原理 464 13.6.2 镜头光晕案例 465 13.7 投影贴图 468 13.7.1 案例效果与基本原理 468 13.7.2 开发步骤 470 13.8 绘制到纹理 472 13.8.1 案例效果与基本原理 472 13.8.2 开发步骤 473 13.9 高级镜像 476 13.9.1 案例效果与基本原理 476 13.9.2 开发步骤 477 13.10 高真实感水面倒影 480 13.10.1 案例效果与基本原理 480 13.10.2 开发步骤 481 13.11 本章小结 484 第14章 阴影及高级光照 485 14.1 多重渲染目标 485 14.1.1 基本知识 485 14.1.2 一个简单的案例 486 14.2 阴影的重要性 491 14.3 平面阴影 493 14.3.1 案例效果与基本原理 493 14.3.2 开发步骤 494 14.4 阴影映射 497 14.4.1 案例效果与基本原理 497 14.4.2 距离纹理的生成 498 14.4.3 阴影场景的绘制 501 14.5 阴影贴图 506 14.5.1 案例效果与基本原理 506 14.5.2 开发步骤 507 14.6 静态光照贴图 508 14.6.1 案例效果与基本原理 508 14.6.2 使用3ds Max制作静态 光照贴图 509 14.6.3 案例的开发 510 14.7 聚光灯高级光源 512 14.7.1 第一种实现的案例效果与 基本原理 513 14.7.2 第一种实现案例的开发 步骤 514 14.7.3 第二种实现的案例效果与 基本原理 515 14.7.4 第二种实现案例的开发 步骤 516 14.8 延迟渲染 517 14.8.1 案例效果与基本原理 517 14.8.2 开发步骤 518 14.9 环境光遮挡 522 14.9.1 基本原理 522 14.9.2 一个简单的案例 524 14.9.3 效率的提升 526 14.9.4 平滑处理 528 14.10 本章小结 529 第15章 几种高级着色器特效 530 15.1 运动模糊 530 15.1.1 普通运动模糊 530 15.1.2 高级运动模糊 533 15.2 遮挡透视效果 536 15.2.1 案例效果与基本原理 536 15.2.2 开发步骤 538 15.3 积雪效果 541 15.3.1 案例效果与基本原理 541 15.3.2 开发步骤 541 15.4 背景虚化 542 15.4.1 案例效果与基本原理 542 15.4.2 开发步骤 543 15.5 泛光效果 545 15.5.1 案例效果与基本原理 545 15.5.2 开发步骤 546 15.6 色调映射 548 15.6.1 案例效果与背景知识 548 15.6.2 开发步骤 549 15.7 体绘制 550 15.7.1 案例效果与基本原理 550 15.7.2 开发步骤 551 15.8 本章小结 553 第16章 骨骼动画 554 16.1 开发骨骼动画 554 16.1.1 骨骼动画的基本原理 554 16.1.2 开发步骤 557 16.1.3 机器人模型在地面上运动时的 问题 563 16.2 ms3d骨骼动画文件的加载 566 16.2.1 ms3d文件的格式 566 16.2.2 将3ds Max动画文件转换为 ms3d文件 570 16.2.3 加载ms3d文件案例的 开发 574 16.3 自定义格式骨骼动画的加载 591 16.3.1 bnggdh文件的格式 591 16.3.2 Bnggdh类 594 16.3.3 加载bnggdh文件的案例 594 16.4 本章小结 606 第17章 让应用运行得更流畅—— 性能优化 607 17.1 着色器的优化 607 17.1.1 计算量及计算频率的 相关问题 607 17.1.2 其他需要注意的问题 608 17.2 纹理图的优化 609 17.3 3D图形绘制的优化 610 17.3.1 CPU阶段的优化 610 17.3.2 几何阶段的优化 611 17.3.3 光栅化阶段的优化 612 17.4 图元重启 612 17.4.1 基本原理 612 17.4.2 一个简单的案例 613 17.5 几何体实例渲染 614 17.5.1 基本原理 614 17.5.2 基于实例渲染的土星光环 案例 615 17.6 视锥体剪裁 620 17.6.1 AABB包围盒的基本原理 620 17.6.2 AABB包围盒的计算 621 17.6.3 视锥体剪裁的基本思路及 实现策略 622 17.6.4 一个简单的案例 623 17.7 遮挡查询 626 17.7.1 相关方法 626 17.7.2 基本原理和实现策略 626 17.7.3 一个简单的案例 627 17.8 计算着色器的使用 630 17.8.1 基础知识 630 17.8.2 动态法向量光照水面案例 633 17.9 多线程并发渲染 640 17.9.1 基本原理 641 17.9.2 飞船案例的开发 641 17.10 多子通道渲染 646 17.10.1 基本原理 646 17.10.2 一个简单的案例 647 17.11 细节级别LOD 652 17.12 本章小结 653 第18章 杂项 654 18.1 四元数旋转 654 18.1.1 基本原理与案例效果 654 18.1.2 开发步骤 656 18.2 3D拾取技术 662 18.2.1 案例效果与基本原理 662 18.2.2 开发步骤 665 18.3 多重采样抗锯齿 670 18.3.1 基本知识与案例效果 670 18.3.2 一个简单的案例 671 18.4 保存屏幕截图 674 18.5 Windows系统窗口缩放 676 18.6 曲面细分着色器 677 18.6.1 基本知识 677 18.6.2 一个简单的案例 680 18.7 几何着色器 685 18.8 macOS、iOS与Linux平台下Vulkan 应用的开发 688 18.8.1 macOS与iOS平台下Vulkan 应用程序的开发 688 18.8.2 Linux平台下Vulkan图形应用 程序的开发 692 18.9 本章小结 700 第19章 基于Vulkan的3D休闲游戏—— 方块历险记 701 19.1 游戏背景及功能概述 701 19.1.1 游戏开发背景概述 701 19.1.2 游戏功能简介 701 19.2 游戏的策划及准备工作 702 19.2.1 游戏的策划 703 19.2.2 游戏的开发准备工作 703 19.3 游戏的架构 705 19.3.1 各类的简要介绍 705 19.3.2 游戏框架简介 706 19.4 布景相关类 707 19.4.1 3D布景类——My3Dlayer 707 19.4.2 总绘制类——MyDraw 712 19.4.3 摄像机管理类—— CameraUtil 716 19.4.4 3D物体创建类—— Square3D 717 19.5 机关与方块相关类 718 19.5.1 方块管理类—— ZFTManager 718 19.5.2 地刺机关管理类—— DiCiBox 721 19.5.3 掉落块机关管理类—— DiaoLuoManager 722 19.6 游戏入口及辅助工具类 724 19.6.1 游戏入口类——main 724 19.6.2 触控监听类——Touch2D 726 19.7 着色器的开发 728 19.8 游戏的优化及改进 730 |