《DIRECTX 12 3D游戏开发实战》PDF下载

  • 购买积分:20 如何计算积分?
  • 作  者:(美)弗兰克·D.卢娜著;王陈译
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2019
  • ISBN:7115479211
  • 页数:742 页
图书介绍:

第一部分 必备的数学知识 3

第1章 向量代数 3

1.1向量 3

1.1.1向量与坐标系 4

1.1.2左手坐标系与右手坐标系 5

1.1.3向量的基本运算 6

1.2长度和单位向量 8

1.3点积 9

1.4叉积 12

1.4.1 2D向量的伪叉积 13

1.4.2通过叉积来进行正交化处理 13

1.5点 14

1.6利用DirectXMath库进行向量运算 15

1.6.1向量类型 16

1.6.2加载方法和存储方法 17

1.6.3参数的传递 18

1.6.4常向量 20

1.6.5重载运算符 21

1.6.6杂项 21

1.6.7 Setter函数 21

1.6.8向量函数 23

1.6.9浮点数误差 26

1.7小结 28

1.8练习 29

第2章 矩阵代数 34

2.1矩阵的定义 34

2.2矩阵乘法 36

2.2.1定义 36

2.2.2向量与矩阵的乘法 37

2.2.3结合律 37

2.3转置矩阵 38

2.4单位矩阵 38

2.5矩阵的行列式 39

2.5.1余子阵 40

2.5.2行列式的定义 40

2.6伴随矩阵 41

2.7逆矩阵 42

2.8用DirectXMath库处理矩阵 43

2.8.1矩阵类型 44

2.8.2矩阵函数 46

2.8.3 DirectXMath矩阵示例程序 47

2.9小结 49

2.10练习 49

第3章 变换 52

3.1线性变换 52

3.1.1定义 52

3.1.2矩阵表示法 53

3.1.3缩放 53

3.1.4旋转 55

3.2仿射变换 58

3.2.1齐次坐标 58

3.2.2仿射变换的定义及其矩阵表示 58

3.2.3平移 59

3.2.4缩放和旋转的仿射矩阵 61

3.2.5仿射变换矩阵的几何意义 61

3.3变换的复合 62

3.4坐标变换 63

3.4.1向量的坐标变换 64

3.4.2点的坐标变换 65

3.4.3坐标变换的矩阵表示 66

3.4.4坐标变换矩阵及其结合律 66

3.4.5坐标变换矩阵及其逆矩阵 67

3.5变换矩阵与坐标变换矩阵 68

3.6 DirectXMath库提供的变换函数 69

3.7小结 70

3.8练习 71

第二部分Direct3D基础 77

第4章Direct3D的初始化 77

4.1预备知识 77

4.1.1 Direct3D 12概述 77

4.1.2组件对象模型 78

4.1.3纹理格式 79

4.1.4交换链和页面翻转 80

4.1.5深度缓冲 81

4.1.6资源与描述符 83

4.1.7多重采样技术的原理 85

4.1.8利用Direct3D进行多重采样 87

4.1.9功能级别 88

4.1.10 DirectX图形基础结构 89

4.1.11功能支持的检测 92

4.1.12资源驻留 93

4.2 CPU与GPU间的交互 94

4.2.1命令队列和命令列表 94

4.2.2 CPU与GPU间的同步 98

4.2.3资源转换 100

4.2.4命令与多线程 101

4.3初始化Direct3D 102

4.3.1创建设备 102

4.3.2创建围栏并获取描述符的大小 104

4.3.3检测对4X MSAA质量级别的支持 104

4.3.4创建命令队列和命令列表 105

4.3.5描述并创建交换链 105

4.3.6创建描述符堆 107

4.3.7创建渲染目标视图 108

4.3.8创建深度/模板缓冲区及其视图 110

4.3.9设置视口 114

4.3.10设置裁剪矩形 115

4.4计时与动画 116

4.4.1性能计时器 116

4.4.2游戏计时器类 117

4.4.3帧与帧之间的时间间隔 118

4.4.4总时间 120

4.5应用程序框架示例 123

4.5.1 D3DApp类 123

4.5.2非框架方法 126

4.5.3框架方法 127

4.5.4帧的统计信息 128

4.5.5消息处理函数 130

4.5.6“初始化Direct3D演示”程序 131

4.6调试Direct3D应用程序 135

4.7小结 137

第5章 渲染流水线 139

5.1 3D视觉即错觉? 140

5.2模型的表示 141

5.3计算机色彩基础 142

5.3.1颜色运算 143

5.3.2 128位颜色 143

5.3.3 32位颜色 144

5.4渲染流水线概述 145

5.5输入装配器阶段 147

5.5.1顶点 147

5.5.2图元拓扑 147

5.5.3索引 151

5.6顶点着色器阶段 152

5.6.1局部空间和世界空间 153

5.6.2观察空间 156

5.6.3投影和齐次裁剪空间 158

5.7曲面细分阶段 164

5.8几何着色器阶段 165

5.9裁剪 165

5.10光栅化阶段 167

5.10.1视口变换 167

5.10.2背面剔除 167

5.10.3顶点属性插值 169

5.11像素着色器阶段 170

5.12输出合并阶段 170

5.13小结 171

5.14练习 171

第6章 利用Direct3D绘制几何体 175

6.1顶点与输入布局 175

6.2顶点缓冲区 178

6.3索引和索引缓冲区 183

6.4顶点着色器示例 187

6.5像素着色器示例 192

6.6常量缓冲区 195

6.6.1创建常量缓冲区 195

6.6.2更新常量缓冲区 198

6.6.3上传缓冲区辅助函数 198

6.6.4常量缓冲区描述符 201

6.6.5根签名和描述符表 202

6.7编译着色器 206

6.7.1离线编译 208

6.7.2生成着色器汇编代码 210

6.7.3 利用Visual Studio离线编译着色器 212

6.8光栅器状态 213

6.9流水线状态对象 214

6.10几何图形辅助结构体 217

6.11立方体演示程序 219

6.12小结 229

6.13练习 230

第7章 利用Direct3D绘制几何体(续) 235

7.1帧资源 235

7.2渲染项 238

7.3渲染过程中所用到的常量数据 239

7.4不同形状的几何体 242

7.4.1生成柱体网格 244

7.4.2生成球体网格 248

7.4.3生成几何球体网格 249

7.5绘制多种几何体演示程序 251

7.5.1顶点缓冲区和索引缓冲区 252

7.5.2渲染项 255

7.5.3帧内资源和常量缓冲区视图 257

7.5.4绘制场景 260

7.6细探根签名 262

7.6.1根参数 263

7.6.2描述符表 264

7.6.3根描述符 266

7.6.4根常量 267

7.6.5更复杂的根签名示例 269

7.6.6根参数的版本控制 270

7.7陆地与波浪演示程序 271

7.7.1生成栅格顶点 273

7.7.2生成栅格索引 274

7.7.3应用计算高度的函数 275

7.7.4根常量缓冲区视图 277

7.7.5动态顶点缓冲区 279

7.8小结 281

7.9练习 282

第8章 光照 283

8.1光照与材质的交互 283

8.2法向量 285

8.2.1计算法向量 286

8.2.2变换法向量 288

8.3参与光照计算的一些关键向量 289

8.4朗伯余弦定律 290

8.5漫反射光照 292

8.6环境光照 292

8.7镜面光照 293

8.7.1菲涅耳效应 294

8.7.2表面粗糙度 296

8.8光照模型的概述 298

8.9材质的实现 299

8.10平行光源 304

8.11点光源 304

8.12聚光灯光源 306

8.13光照的具体实现 306

8.13.1 Light结构体 307

8.13.2常用辅助函数 308

8.13.3实现方向光源 310

8.13.4实现点光源 310

8.13.5实现聚光灯光源 311

8.13.6多种光照的叠加 312

8.13.7 HLSL主文件 313

8.14光照演示程序 316

8.14.1顶点格式 317

8.14.2计算法线 317

8.14.3更新光照的方向 319

8.14.4更新根签名 320

8.15 小结 320

8.16练习 321

第9章 纹理贴图 323

9.1纹理与资源的回顾 324

9.2纹理坐标 325

9.3纹理数据源 328

9.3.1 DDS格式概述 328

9.3.2创建DDS文件 329

9.4创建以及启用纹理 330

9.4.1加载DDS文件 330

9.4.2着色器资源视图堆 331

9.4.3创建着色器资源视图描述符 331

9.4.4将纹理绑定到流水线 333

9.5过滤器 335

9.5.1放大 335

9.5.2缩小 337

9.5.3各向异性过滤 338

9.6寻址模式 339

9.7采样器对象 341

9.7.1创建采样器 341

9.7.2静态采样器 344

9.8在着色器中对纹理进行采样 346

9.9板条箱演示程序 347

9.9.1指定纹理坐标 347

9.9.2创建纹理 348

9.9.3设置纹理 349

9.9.4更新HLSL部分代码 349

9.10纹理变换 352

9.11附有纹理的山川演示程序 353

9.11.1生成栅格纹理坐标 353

9.11.2铺设纹理 355

9.11.3纹理动画 355

9.12小结 356

9.13练习 356

第 10章 混合 359

10.1混合方程 360

10.2混合运算 360

10.3混合因子 362

10.4混合状态 363

10.5混合示例 365

10.5.1禁止颜色的写操作 365

10.5.2加法混合与减法混合 366

10.5.3乘法混合 366

10.5.4透明混合 367

10.5.5混合与深度缓冲区 368

10.6 alpha通道 368

10.7裁剪像素 369

10.8雾 371

10.9小结 377

10.10练习 377

第11章 模板 379

11.1深度/模板缓冲区的格式及其资源数据的清理 380

11.2模板测试 381

11.3描述深度/模板状态 382

11.3.1深度信息的相关设置 382

11.3.2模板信息的相关设置 383

11.3.3创建和绑定深度/模板状态 384

11.4实现平面镜效果 385

11.4.1镜像概述 385

11.4.2定义镜像的深度/模板状态 387

11.4.3绘制场景 389

11.4.4绕序与镜像 390

11.5实现平面阴影 391

11.5.1平行光阴影 391

11.5.2点光阴影 393

11.5.3通用阴影矩阵 394

11.5.4使用模板缓冲区防止双重混合 394

11.5.5编写阴影部分的代码 395

11.6小结 396

11.7练习 397

第12章 几何着色器 402

12.1编写几何着色器 402

12.2以公告牌技术实现森林效果 408

12.2.1概述 408

12.2.2顶点结构体 410

12.2.3 HLSL文件 411

12.2.4 SV_PrimitiveID语义 416

12.3纹理数组 417

12.3.1概述 417

12.3.2对纹理数组进行采样 417

12.3.3加载纹理数组 418

12.3.4纹理子资源 418

12.4 alpha-to-coverage技术 419

12.5小结 421

12.6练习 422

第13章 计算着色器 425

13.1线程与线程组 427

13.2一个简单的计算着色器 428

13.3数据的输入与输出资源 430

13.3.1纹理输入 430

13.3.2纹理输出与无序访问视图 430

13.3.3利用索引对纹理进行采样 433

13.3.4结构化缓冲区资源 435

13.3.5将计算着色器的执行结果复制到系统内存 437

13.4线程标识的系统值 441

13.5追加缓冲区与消费缓冲区 442

13.6共享内存与线程同步 443

13.7图像模糊演示程序 445

13.7.1图像模糊理论 445

13.7.2渲染到纹理技术 448

13.7.3图像模糊的实现概述 450

13.7.4计算着色器程序 456

13.8拓展资料 461

13.9小结 461

13.10练习 463

第14章 曲面细分阶段 468

14.1曲面细分的图元类型 469

14.2外壳着色器 470

14.2.1常量外壳着色器 470

14.2.2控制点外壳着色器 473

14.3镶嵌器阶段 474

14.3.1四边形面片的曲面细分示例 475

14.3.2三角形面片的曲面细分示例 475

14.4域着色器 476

14.5对四边形进行镶嵌化处理 477

14.6三次贝塞尔四边形面片 481

14.6.1贝塞尔曲线 482

14.6.2三次贝塞尔曲面 484

14.6.3计算三次贝塞尔曲面的相关代码 485

14.6.4定义面片的几何形状 487

14.7小结 489

14.8练习 490

第三部分 主 题篇 493

第15章 构建第一人称视角的摄像机与动态索引 493

15.1重温取景变换 493

15.2摄像机类 494

15.3摄像机类中的方法实现选讲 496

15.3.1返回XMVECTOR类型变量的方法 496

15.3.2 SetLens方法 497

15.3.3推导视锥体信息 497

15.3.4与摄像机相关的变换操作 498

15.3.5构建观察矩阵 499

15.4摄像机演示程序的若干注解 500

15.5动态索引 502

15.6小结 509

15.7练习 509

第16章 实例化与视锥体剔除 511

16.1硬件实例化 511

16.1.1绘制实例数据 512

16.1.2实例数据 512

16.1.3创建实例缓冲区 517

16.2包围体与视锥体 519

16.2.1 DirectXMath碰撞检测库 520

16.2.2包围盒 520

16.2.3包围球 523

16.2.4视锥体 524

16.3视锥体剔除 529

16.4小结 532

16.5练习 533

第17章 拾取 535

17.1屏幕空间到投影窗口的变换 536

17.2位于世界空间与局部空间中的拾取射线 539

17.3射线与网格的相交检测 540

17.3.1射线与轴对齐包围盒的相交检测 542

17.3.2射线与球体的相交检测 542

17.3.3射线与三角形的相交检测 543

17.4应用例程 545

17.5小结 546

17.6练习 547

第18章 立方体贴图 548

18.1什么是立方体贴图 548

18.2环境贴图 549

18.3绘制天空纹理 552

18.4模拟反射 556

18.5动态立方体图 559

18.5.1动态立方体图辅助类 561

18.5.2构建立方体图资源 562

18.5.3分配额外的描述符堆空间 562

18.5.4构建描述符 564

18.5.5构建深度缓冲区 565

18.5.6立方体图的视口与裁剪矩形 566

18.5.7设置立方体图摄像机 566

18.5.8 对立方体图进行绘制 568

18.6用几何着色器绘制动态立方体图 571

18.7小结 574

18.8练习 574

第19章 法线贴图 577

19.1使用法线贴图的动机 577

19.2什么是法线贴图 578

19.3纹理空间/切线空间 580

19.4顶点切线空间 582

19.5在切线空间与物体空间之间进行转换 583

19.6法线贴图的着色器代码 584

19.7小结 588

19.8练习 589

第20章 阴影贴图 591

20.1渲染场景深度 591

20.2正交投影 594

20.3投影纹理坐标 595

20.3.1代码实现 597

20.3.2视锥体之外的点 598

20.3.3正交投影 598

20.4什么是阴影贴图 599

20.4.1算法描述 599

20.4.2偏移与走样 600

20.4.3百分比渐近过滤 603

20.4.4构建阴影图 607

20.4.5阴影因子 612

20.4.6阴影图检测 614

20.4.7渲染阴影图 614

20.5过大的PCF核 615

20.5.1 ddx函数与ddy函数 616

20.5.2较大PCF核问题的解决方案 616

20.5.3较大PCF核问题的另一种解决方案 618

20.6小结 619

20.7练习 620

第21章 环境光遮蔽 622

21.1通过投射光线实现环境光遮蔽 623

21.2屏幕空间环境光遮蔽 626

21.2.1法线与深度值的渲染过程 626

21.2.2环境光遮蔽的渲染过程 628

21.2.3模糊过程 637

21.2.4使用环境光遮蔽图 641

21.3小结 642

21.4练习 642

第22章 四元数 644

22.1复数回顾 644

22.1.1定义 645

22.1.2复数的几何意义 645

22.1.3极坐标表示法与旋转操作 646

22.2四元数代数 647

22.2.1定义与基本运算 647

22.2.2特殊乘积 648

22.2.3性质 648

22.2.4转换 649

22.2.5共轭与范数 649

22.2.6四元数的逆 650

22.2.7极坐标表示法 651

22.3单位四元数及其旋转操作 652

22.3.1旋转算子 652

22.3.2将四元数旋转算子转换为矩阵形式 654

22.3.3将旋转矩阵变换为四元数旋转算子 655

22.3.4复合 657

22.4四元数插值 657

22.5 DirectX数学库中与四元数有关的函数 661

22.6 旋转演示程序 662

22.7小结 667

22.8练习 667

第23章 角色动画 670

23.1框架层次 670

23.2蒙皮网格 674

23.2.1定义 674

23.2.2重新推导将骨骼变换至根坐标系的公式 674

23.2.3偏移变换 675

23.2.4驱动骨架运动 675

23.2.5计算最终变换 677

23.3顶点混合 679

23.4从文件中加载动画数据 682

23.4.1文件头 682

23.4.2材质 683

23.4.3子集 683

23.4.4顶点数据与三角形 684

23.4.5骨骼偏移变换 685

23.4.6层次结构 685

23.4.7动画数据 686

23.4.8 M3DLoader类 688

23.5角色动画演示程序 689

23.6小结 692

23.7练习 694

附录A Windows编程入门 695

A.1概述 696

A.1.1资源 696

A.1.2事件、消息队列、消息以及消息循环 696

A.1.3图形用户界面 698

A.1.4 Unicode 698

A.2基本的Windows应用程序 699

A.3讲解基本Windows应用程序的工作流程 702

A.3.1程序中的头文件、全局变量以及函数声明 702

A.3.2 WinMain 703

A.3.3 WNDCLASS结构体与实例注册 704

A.3.4创建并显示窗口 705

A.3.5消息循环 707

A.3.6窗口过程 708

A.3.7消息框函数 710

A.4一种更灵活的消息循环 710

A.5小结 711

A.6练习 711

附录B高级着色器语言参考 713

B.1变量类型 713

B.1.1标量类型 713

B.1.2向量类型 713

B.1.3矩阵类型 714

B.1.4数组 716

B.1.5结构体 716

B.1.6 typedef关键字 716

B.1.7变量的修饰符 717

B.1.8强制类型转换 717

B.2关键字与运算符 718

B.2.1关键字 718

B.2.2运算符 718

B.3程序中的控制流 720

B.4函数 721

B.4.1用户自定义函数 721

B.4.2内置函数 722

B.4.3常量缓冲区的封装规则 725

附录C解析几何学选讲 728

C.1射线、直线以及线段 728

C.2平行四边形 729

C.3三角形 729

C.4平面 730

C.4.1 DirectX数学库中平面的表示 731

C.4.2空间点与平面的位置关系 731

C.4.3构建平面 732

C.4.4对平面进行规范化处理 733

C.4.5对平面进行变换 733

C.4.6平面内离指定点最近的点 734

C.4.7射线与平面的相交检测 734

C.4.8反射向量 735

C.4.9反射点 735

C.4.10反射矩阵 736

C.5练习 737

附录D参考资料 739