中文第一计算机图形学社区OpenGPU 版权所有2007-2018

 找回密码
 注册

扫一扫,访问微社区

搜索
查看: 445|回复: 1

[Book] Directx12 3D游戏程序设计(20190124更新)

[复制链接]
发表于 2019-1-24 20:53:49 | 显示全部楼层 |阅读模式
本帖最后由 Gavin 于 2019-1-24 20:55 编辑

目录
DirectX12 3D游戏程序设计        2
致谢        3
第一部分 DirectX11入门        14
第一章 DirectX的邂逅        14
1.1 DirectX简介        14
1.1.1        DirectX是何物        14
1.1.2        DirectX的各个版本        14
1.1.3        DirectX和OpenGL        15
1.1.4        DirectX、OpenGL该学哪一个        16
1.2 DirectX的组件        16
1.2.1        DirectX的组件        16
1.2.2        DirectX逝去的组件        17
1.3 DirectX渲染管线基本概念        18
1.3.1        DirectX的固定渲染管线        18
1.3.2        DirectX的可编程渲染管线和着色器语言        19
1.3.3        DirectX新增的着色器        20
1.4 本章小结与练习        23
1.4.1        小结        23
1.4.2        习题        23
第二章 3D基础数学原理        25
2.1 坐标系        25
2.1.1        2D坐标系        25
2.1.2        3D坐标系        26
2.1.3        其他坐标系        27
2.2        向量        28
2.2.1 向量的概念        28
2.2.2 向量长度和归一化        29
2.2.3 向量的相加与相减        30
2.2.4 向量和标量的乘法        31
2.2.5 向量的点积        31
2.2.5 向量的叉积        32
2.2.6 位置和位移向量        32
2.3 矩阵        33
2.3.1        矩阵的定义        33
2.3.2        矩阵的加减法        33
2.3.3        矩阵的乘法        34
2.3.4        单位矩阵        35
2.3.5        转置矩阵        35
2.4 欧拉角        35
2.4.1        欧拉角的定义        35
2.5 四元素        36
2.5.1        四元素        36
2.6 本章小结与练习        37
2.6.1        小结        37
2.6.2        习题        37
第三章 Directx3D入门程序        38
3.1 第一个Directx3D程序        38
3.1.1        创建一个空项目        38
3.1.2        添加代码        42
3.1.3        代码分析        48
3.1.4        代码编译        51
3.2 渲染一个三角形        55
3.2.1        顶点        55
3.2.2        顶点缓存(Vertex Buffer)        56
3.2.3        加载Shader文件        58
3.2.4        输入布局(Input Layout)        59
3.2.5        图元        61
3.2.6        渲染三角形        61
3.2.7        释放资源        63
3.3 渲染旋转的立方体        63
3.3.1        颜色        63
3.3.2        索引缓存(Index Buffer)        64
3.3.3        常量缓存(Constant Buffer)        66
3.3.4        空间变换        67
3.3.5        渲染立方体        69
3.4 本章小结与练习        71
3.4.1        小结        71
3.4.2        习题        71
第四章 HLSL入门        72
4.1 HLSL基本语句        72
4.1.1        HLSL简述        72
4.1.2        基本数据类型Data Types        72
4.1.3        控制语句Flow Control        74
4.1.4        语义Semantics        75
4.1.5        寄存器register        76
4.1.6        着色器型号Shader Models        77
4.2        编写HLSL代码        77
4.2.1        全局变量        77
4.2.2        输入输出结构        78
4.2.3        入口函数        78
4.2.4        内置函数        80
4.2.5        顶点着色代码        80
4.2.6        像素着色代码        80
4.2.7        编译HLSL代码        80
4.3        纹理映射        82
4.3.1        贴图、纹理、DDS格式图片        82
4.3.2        制作DDS格式图片        82
4.3.3        纹理的UV坐标        83
4.3.4        纹理过滤(Texture Filtering)        85
4.3.5        纹理的寻址方式        86
4.4 渲染带纹理的立方体        88
4.4.1        着色器资源视图        88
4.4.2        纹理采样状态        89
4.4.3        纹理渲染        90
4.4.4        带纹理的HLSL代码        92
4.5 效果框架Effect11        93
4.5.1        Effect11简述        93
4.5.2        Effect11对象创建        93
4.5.3        Effect11的HLSL代码规范        96
4.5.4        Effect11接口和数据结构        98
4.5.5        Effect11的输入布局        99
4.5.6        Effect11的渲染        100
4.6 本章小结与练习        102
4.6.1        小结        102
4.6.2        习题        102
第五章 界面        103
5.1 DXUT11的对话框        103
5.1.1        对话框资源管理器        103
5.1.2        对话框及其控件        105
5.1.3        滑动控件        107
5.1.4        单选框        108
5.1.5        复选框        110
5.1.6        下拉框        111
5.2 Win32应用程序        113
5.2.1        什么是Win32        113
5.2.2        创建Win32窗口的代码        113
5.2.3 注册窗口        116
5.2.4 创建窗口        117
5.2.5 消息循环处理        118
5.2.6 消息回调函数        119
5.3 Direct3D初始化        119
5.3.1        设定Direct3D设备能力        119
5.3.2        设定数据交换链        121
5.3.3        创建设备和数据交换链        122
5.3.4        创建视口和得到DXGI        125
5.3.5        渲染目标和渲染目标视图        127
5.3.6        渲染、重组和释放        128
5.4 Direct2D初始化        131
5.4.1        创建Direct2D设备        131
5.4.2        创建Direct2D渲染目标位图        133
5.4.3        Direct2D渲染和重组        135
5.5 Direct2D界面元素        136
5.5.1        画刷的应用        136
5.5.2        渐变画刷设定        139
5.5.4        渐变画刷的创建        140
5.5.3        创建WIC对象        142
5.5.4        创建和绘制Direct2D位图        143
5.5.5        位图画刷        147
5.5.6        文本的渲染        148
5.6 本章小结与练习        151
5.5.1        小结        151
5.5.2        习题        151
第六章 相机和模型文件加载        153
6.1 虚拟相机        153
6.1.1        相机的介绍        153
6.1.2        透视相机的使用        154
6.1.3        正交相机格式        157
6.2 3D网格        159
6.2.1        3D网格介绍        159
6.2.2        sdkmesh格式转换        160
6.2.3        使用sdkmesh文件        161
6.3 本章小结与练习        164
6.3.1        小结        164
6.3.2        习题        164
第七章 光照        165
7.1 光        165
7.1.1        法线        165
7.1.2        光源        165
7.1.3        光反射        166
7.2 光照示例        168
7.2.1        环境反射示例        168
7.2.2        漫反射示例        169
7.2.3        镜面反射示例        173
7.2.4        点光源示例        178
7.3 本章小结与练习        183
7.3.1        小结        183
7.3.2        习题        183
第二部分 DirectX12 UWP入门        184
第八章 DirectX12 UWP框架        184
8.1 UWP窗口创建        184
8.1.1        UWP和Win32的区别        184
8.1.2        DirectX12 UWP模版        185
8.1.3        UWP入口函数        186
8.1.4        创建和初始化视图        187
8.1.5        绑定窗口的事件        189
8.1.6        资源加载卸载和运行        190
8.2 UWP事件处理函数        193
8.2.1        生命周期事件        193
8.2.2        窗口事件        194
8.2.3        显示信息事件        195
8.3 DirectX12设备资源创建        196
8.3.1        DirectX12运行步骤类        196
8.3.2        DirectX12设备资源类        197
8.3.3        DirectX12设备创建        198
8.3.4        DirectX12命令队列/列表和围栏的创建        200
8.4 DirectX12视图资源创建        202
8.4.1        DirectX12数据交换链        202
8.4.2        DirectX12渲染目标视图        204
8.4.3        描述堆属性        207
8.4.4        DirectX12深度模板视图        207
8.5 DirectX12根签名        211
8.5.1        应用数据存储ApplicationData        211
8.5.2        根参数和描述符范围        213
8.5.3        根签名优化标识和根签名布局        215
8.5.4        创建根签名ID3D12RootSignature        217
8.6 DirectX12游戏资源创建        218
8.6.1        异步加载着色器        218
8.6.2        图像命令列表和管道状态        219
8.6.3        创建命令列表        222
8.6.4        创建顶点缓存视图和索引缓存视图        223
8.6.5        常量缓存视图        226
8.6.6        WaitForGpu        228
8.7 DirectX12游戏循环        229
8.7.1        游戏逻辑循环        229
8.7.2        游戏渲染循环        231
8.7.3        清除渲染目标视图和深度视图        232
8.7.4        渲染操作        233
8.8 UWP应用程序打包和离线安装        235
8.8.1        设置Win10开发人员模式        235
8.8.2        UWP应用程序打包        235
8.8.3        PC机离线安装UWP应用        239
8.9 本章小结与练习        240
8.9.1        小结        240
8.9.2        习题        241
第九章 DirectX12 UWP简单实例        242
9.1 UWP带纹理的立方体        242
9.1.1        构建立方体的顶点        242
9.1.2        DX12纹理采样器        243
9.1.3        带纹理的根签名和描述符堆        245
9.1.4        创建纹理的堆内存        246
9.1.5        将纹理资源上传到GPU        248
9.1.6        创建纹理的着色器资源视图(SRV)        249
9.1.7        将渲染的纹理绑定到渲染管线        250
9.2 UWP带光照的球体        251
9.2.1        创建一个球体        251
9.2.2        球的着色器代码        254
9.2.3        创建新的常量缓存        255
9.2.4        为球添加光照        257
9.3 多个物体的渲染        260
9.3.1        封装常量缓存视图的堆        260
9.2.2        渲染2个位置的球体        264
9.2.3        渲染2张不同的纹理        268
9.2.4        封装像素着色器的常量缓存        272
9.2.5        使用2个不同的渲染状态        273
9.4 本章小结与练习        278
9.4.1        DX12描述符的总结        278
第十章 XAML和DirectX12        280
10.1 创建XAML应用程序        281
10.1.1        XAML简述        281
10.1.2        创建xaml窗口        281
10.1.3        添加XAML控件        283
10.2 创建DirectX-XAML应用程序        287
10.2.1        DirectX12和XAML        287
10.2.2        创建DirectX12-XAML工程        288
10.2.3        适配DirectX12-XAML工程        290
10.3 有交互的DirectX-XAML应用程序        293
10.3.1        有交互的UI        293
10.3.2        响应鼠标        295
10.3.3        响应键盘        297
10.3.4        播放视频和声音        298
第十一章 常见的纹理渲染方式        300
11.1 Alpha blending        300
11.1.1        透明的概念        300
11.1.2        透明的运用        301
11.2 两层纹理渲染        304
11.2.1        两层纹理的概念        304
11.2.2        两层纹理的着色代码        305
11.2.3        两层纹理的c++代码        307
11.2.4        两层纹理的混合        308
11.3 环境映射        309
11.3.1        环境映射的原理和立方贴图纹理        309
11.3.2        立方贴图制作和DDS        310
11.3.3        加载DDS文件        313
11.3.4        立方体纹理渲染        314
11.3.5        反射环境映射        316
11.3.6        折射环境映射        317
11.3.7        菲涅尔效果的环境映射        318
11.4 凹凸纹理映射        320
11.4.1        凹凸纹理映射原理        320
11.4.2        凹凸纹理着色器代码        322
11.4.3        改良凹凸纹理着色        326
11.5 光泽贴图        328
11.5.1        xxx简述        328
11.6 本章小结与练习        328
11.6.1        小结        328
11.6.2        习题        329
第十二章 几何着色和曲面细分        330
12.1 几何着色器        330
12.1.1        几何着色器的作用        330
12.1.2        几何着色器的简单应用        331
12.1.3        三角面细分        333
12.1.4        模型分裂        336
12.2 曲面细分阶段        339
12.2.1        曲面细分的优点        339
12.2.2        外壳着色器(Hull Shader)        340
12.2.3        域着色器(Domain Shader)        344
12.2.4        C++代码部分的修改        346
12.3 PNTriangles        349
12.3.1        曲面细分的优点        349
12.4 DetailTessellation        349
12.4.1        曲面细分的优点        349
第三部分 DirectX12 UWP进阶        351
第X章 DAE Collada模型        351
X.1 模型加载库        351
X.1.1        Assimp和FBX SDK        351
X.1.2        DAE Collada模型文件简介        353
X.1.3        如何获取DAE Collada模型文件        354
X.2 DAE Collada剖析        354
X.2.1        DAE Collada结构        354
X.2.2        library_geometries节点        355
X.2.3        source节点剖析        356
X.2.4        triangles节点剖析        357
X.2.5        材质和纹理的节点剖析        358
X.3 渲染DAE Collada模型        359
X.3.1        使用XmILite解析DAE Collada文件        359
X.3.2        网格原始数据        361
X.3.3        构造网格        362
X.4 多个网格的DAE Collada模型        365
X.4.1        <library_visual_scenes>节点剖析        365
X.4.2        构造和渲染场景        367
第Y章 DAE Collada动画        369
y.3 DAE Collada动画        369
y.3.1        DAE Collada动画        369
第Z章 FBX模型        369
Z.1 XXX        369
Z.1.1        xxx简述        369
第X部分 附录部分        371
附录1         win10下无法运行DirectX11例子        371
附录2         win10下无法运行DirectX12例子        377
附录3         项目许可证过期        377
附录A DirectX设备性能级别        377
附录B 纹理采样器过滤选项        378
附录C 纹理采样数据比较方式        379
附录D 系统值的语义        379
附录E         HLSL内置函数        381
附录F         Effects11 接口        386
附录G         ID3DX11EffectVariable接口        387
附录H         ID3DX11EffectVariable接口        388

新增了点内容,详细参看以上目录里,代码提交到github去了。链接如下所示:
https://github.com/Gavin991/DirectX12CodeSamples

不知不觉,断断续续,有心情没心情地写了4年了,也就这个样子。写之前以为自己有个几斤几两,结果发现自己也就半斤八两而已。日子不怎么好过,干了2年的游戏项目,大家都觉得挺好的,各方面数据也很好,就是因为各种各样的原因没有版号,一直不能上线。听同事说年后公司要调整什么什么的。唉,左三年,右三年,无可奈何又三年,人都老了,就没干出一个知名游戏出来。

提前给大家拜个早年,祝大家事业有成,阖家幸福,身体健康!

评分

1

查看全部评分

发表于 2019-2-12 15:06:12 | 显示全部楼层
年都过去了才看到本帖……总之,桃李不言,下自成蹊。(另外,本站怎么被小广告攻陷了?)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|关于我们|小黑屋|Archiver|手机版|中文第一计算机图形学社区OpenGPU

GMT+8, 2019-2-22 05:17 , Processed in 1.108688 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表