从第一次接触DirectX 11到如今已经有将近两年的时间了。还记得前年暑假被要求学习DirectX 11,在用龙书的源码配置项目运行环境的时候都花了好几天的时间才搞定,还得忍受上千个没法避免的编译警告,不得不视警告为无物。并且里面的代码使用了Microsoft DirectX SDK(June 2010)开发包和里面的Effects 11框架,这些东西都已是8年前的产物了。html
而后在18年5月的时候,我先是在Github上翻到了微软对FX11(原Effects11)库一直都还在更新,而后发现了DirectX Tool Kit和DirectX SDK Samples,里面提供的教程写法和龙书的作法不同。而后我才明白,微软其实已经将DirectX的相关组件随同Windows SDK一块儿更新。而我如今使用的是Visual Studio 2019 Community,里面就已经包含了Windows SDK。通过一段时间的文档和样例阅读后,决定尝试编写一个全新的教程来过渡到当前DirectX 11的较新版本。git
可是在转移的时候也遇到了不少须要解决的问题,好比:github
d3dx11.h
, xnamath.h
, dxerr.h
, xnacollision.h
等这些老旧的头文件X4717: Effects deprecated for D3DCompiler_47
,提示Effects11将来可能不受D3DCompiler的支持这些问题均可如下面的教程中找到对应的解决/替代方案,在这里就不一一列举了。
windows
十分重要!因为该文章系列注重的是项目实践,并非面向零基础的初学者。在学习本教程以前须要:api
本教程的特色以下:框架
尽管这边提供了大量的学习Demo,但仍是鼓励你们边学习边搭建本身的软引擎,多动手实践,只有踩过的坑才是你本身的。
函数
如何让你的DirectX 11学习之路更为平坦?在此我给出几点调试相关的建议:布局
HRESULT
类型错误码,可使用我这边的DXTrace
库来了解错误码的具体含义,也可使用DirectX SDK中的Utilities\bin\x86\DXErr.exe
来查询下面是一个尝试使用显示适配器建立D3D设备引起的错误:
学习
注意:
1. 考虑到如今DXTK库只是用到了它里面的键鼠类和纹理加载,如今已经单独提取出来使用。
2. 该教程在Github有专门配套的项目源码,读者能够自行下载。
3. 如今某些章节会有一些练习题,除了龙书里面有的部分进行挑选外,本身也尝试出了一些题目。
4. 本教程并不能表明Direct3D的方方面面,你还须要善于利用下面参考资料中给予的MSDN文档来查询信息。
5. 教程的阅读顺序从入门篇开始,并须要先阅读里面提到的前置章节。测试
因为博主如今要开始准备考研了,所以本教程将会长期暂停出新内容直到明年再继续
GitHub项目浏览与下载
欢迎加入QQ群: 727623616 能够一块儿探讨DX11,以及有什么问题也能够在这里汇报。
语言:
-C++11和少许C++14
-HLSL Shader Model 5.0
目前全部项目无需依赖第三方库的编译,而是从微软官方项目中提取了下述模块到项目中:
DirectXTex/DDSTextureLoader
DirectXTex/WICTextureLoader
DirectXTex/ScreenGrab
DXTK/Mouse(源码上有所修改)
DXTK/Keyboard(源码上有所修改)
IDE | VS2019 | VS2017 | VS2015 |
---|---|---|---|
D3DComplier版本 | 47 | 47 | 47 |
Windows SDK版本 | 10.0.17763.0 | 10.0.17763.0 | 10.0.14393.0 |
Windows开发/运行环境 | Windows 10 | Windows 10 | Windows 7 SP1及更高版本 |
平台 | x86/x64支持 | x86/x64支持 | x86/x64支持 |
配置 | Debug/Release支持 | Debug/Release支持 | Debug/Release支持 |
注意:
- 教程不支持VS2013及更低版本!
- VS2015在安装时须要勾选VS2015 更新 3, 以及Tools(1.4.1)和Windows 10 SDK(10.0.14393)
- Win7系统须要安装Service Pack 1以及KB2670838补丁以支持Direct3D 11.1
- 建议安装配置表列出的VS所使用的对应版本的Windows SDK
博客和项目维护不易,若是本系列教程对你有所帮助,但愿可以扫码支持一下博主。
目录 | 版次 | 建立时间 | 修改时间 |
---|---|---|---|
教程项目没法编译、运行的解决方法 | 第4版 | 2018/12/28 | 2019/3/20 |
HR宏关于dxerr库的替代方案 | 第1版 | 2018/12/24 | 2018/12/24 |
ComPtr智能指针 | 第2版 | 2018/12/28 | 2019/3/20 |
HLSL编译着色器的三种方法 | 第5版 | 2018/12/4 | 2019/9/26 |
Visual Studio图形调试器详细使用教程 | 第6版 | 2018/9/13 | 2019/9/26 |
深刻理解HLSL常量缓冲区打包规则 | 第1版 | 2018/7/27 | 2018/7/27 |
HLSL中矩阵的内存布局和mul函数探讨 | 第2版 | 2018/10/19 | 2019/1/10 |
深刻理解与使用2D纹理资源 | 第8版 | 2019/1/13 | 2019/5/19 |
深刻理解与使用缓冲区资源 | 第3版 | 2019/2/11 | 2019/5/13 |
目录 | 版次 | 建立时间 | 修改时间 |
---|---|---|---|
实现一个3D魔方(1) | 第1版 | 2019/1/7 | 2019/1/7 |
实现一个3D魔方(2) | 第1版 | 2019/1/8 | 2019/1/8 |
实现一个3D魔方(3) | 第1版 | 2019/1/10 | 2019/1/10 |
目录 | 版次 | 建立时间 | 修改时间 |
---|---|---|---|
01 DirectX11初始化 | 第18版 | 2018/5/12 | 2019/4/12 |
02 顶点/像素着色器的建立、顶点缓冲区 | 第17版 | 2018/5/13 | 2019/4/18 |
03 索引缓冲区、常量缓冲区 | 第14版 | 2018/5/13 | 2019/4/18 |
第6版 | 2018/5/13 | 2018/11/4 | |
05 键盘和鼠标输入 | 第5版 | 2018/5/14 | 2019/3/20 |
06 DirectXMath数学库 | 第4版 | 2018/5/15 | 2019/3/11 |
07 添加光照与经常使用几何模型、光栅化状态 | 第20版 | 2018/5/28 | 2019/5/6 |
08 Direct2D与Direct3D互操做性以及利用DWrite显示文字 | 第8版 | 2018/5/29 | 2019/5/1 |
09 纹理映射与采样器状态 | 第18版 | 2018/7/12 | 2019/5/13 |
10 摄像机类 | 第17版 | 2018/7/16 | 2019/4/23 |
目录 | 版次 | 建立时间 | 修改时间 |
---|---|---|---|
11 混合状态 | 第13版 | 2018/7/21 | 2019/5/1 |
12 深度/模板状态、平面镜反射绘制 | 第15版 | 2018/7/28 | 2019/4/23 |
13 动手实现一个简易Effects框架、阴影效果绘制 | 第17版 | 2018/7/29 | 2019/4/23 |
14 深度测试 | 第7版 | 2018/8/5 | 2019/4/23 |
15 几何着色器初探 | 第7版 | 2018/8/8 | 2019/4/23 |
16 流输出阶段 | 第10版 | 2018/8/11 | 2019/5/22 |
17 利用几何着色器实现公告板效果 | 第11版 | 2018/8/19 | 2019/4/23 |
18 使用DirectXCollision库进行碰撞检测 | 第1版 | 2018/8/29 | 2018/8/29 |
19 模型加载:obj格式的读取及使用二进制文件提高读取效率 | 第14版 | 2018/9/11 | 2019/9/26 |
20 硬件实例化与视锥体裁剪 | 第8版 | 2018/9/25 | 2019/4/23 |
21 鼠标拾取 | 第2版 | 2018/10/17 | 2018/12/20 |
22 立方体映射:静态天空盒的读取与实现 | 第8版 | 2018/10/28 | 2019/4/23 |
23 立方体映射:动态天空盒的实现 | 第3版 | 2018/11/3 | 2019/4/23 |
24 Render-To-Texture(RTT)技术的应用 | 第6版 | 2018/11/18 | 2019/4/23 |
25 法线贴图 | 第2版 | 2019/1/6 | 2019/3/20 |
目录 | 版次 | 建立时间 | 修改时间 |
---|---|---|---|
26 计算着色器:入门 | 第3版 | 2019/1/31 | 2019/3/20 |
27 计算着色器:双调排序 | 第2版 | 2019/2/19 | 2019/3/20 |
----长期停更---- | ------ | -------- | -------- |
如下是内容储备,但今年不会开坑,也不会保证下面这些坑都能开。
目录 |
---|
Win32 窗口初始化 |
渲染管线和变换 |
HLSL |
DirectX + ImGui |
DirectX + Assimp |
MSDN文档,同时推荐你们收藏以随时查阅:
Direct3D 11 Graphics API(Windows SDK)
Direct3D 11 Graphics(Windows SDK)
参考到的一些网站:
参考书籍:
Introduction to 3D Game Programming with DirectX 11
Practical Rendering and Computation with Direct3D 11