DirectX11 With Windows SDK--00 目录
前言 (更新于 2019/4/10)
从第一次接触DirectX 11到现在已经有将近两年的时间了。还记得前年暑假被要求学习DirectX 11,在用龙书的源码配置项目运行环境的时候都花了好几天的时间才搞定,还得忍受上千个无法避免的编译警告,不得不视警告为无物。而且里面的代码使用了Microsoft DirectX SDK(June 2010)开发包和里面的Effects 11框架,这些东西都已经是8年前的产物了。
然后在18年5月的时候,我先是在Github上翻到了微软对FX11(原Effects11)库一直都还在更新,然后发现了DirectX Tool Kit和DirectX SDK Samples,里面提供的教程写法和龙书的做法不一样。然后我才明白,微软其实已经将DirectX的相关组件随同Windows SDK一起更新。而我现在使用的是Visual Studio 2019 Community,里面就已经包含了Windows SDK。经过一段时间的文档和样例阅读后,决定尝试编写一个全新的教程来过渡到当前DirectX 11的较新版本。
但是在转移的时候也遇到了很多需要解决的问题,比如:
- 没有了诸如
d3dx11.h,xnamath.h,dxerr.h,xnacollision.h等这些老旧的头文件 - 使用新的Effects 11框架的话引发编译器警告:
X4717: Effects deprecated for D3DCompiler_47,提示Effects11未来可能不受D3DCompiler的支持 - 着色器需要手工进行管理,并且HLSL的写法上和FX有些差异(比如Sampler不能在HLSL中直接定义)
- 龙书11的示例代码有关Effects 11的部分基本上还得靠自己重新编写
这些问题都可以下面的教程中找到对应的解决/替代方案,在这里就不一一列举了。
十分重要!由于该文章系列注重的是项目实践,并不是面向零基础的初学者。在学习本教程之前需要:
- 熟悉C++,最好是了解C++11,语言基础决定个人代码质量
- 对线性代数和3D数学基础有所掌握,比如阅读过3D数学基础一书,或者龙书11的第1章到第3章
- 了解渲染管线基础,可以阅读过龙书11的第4章到第5章,用过游戏引擎进行开发,又或者是之前学过DirectX9/11 或 OpenGL
- 自行学习HLSL基础语法
本教程的特点如下:
- 完全脱离对DirectX SDK的依赖,配置难度大幅降低,并且兼容Win7-Win10平台
- 使用原生的HLSL编译器,而不是使用FX11框架和fx5.0
- 对Direct3D 11的一系列API有较为详细的讲解
尽管这边提供了大量的学习Demo,但还是鼓励大家边学习边搭建自己的软引擎,多动手实践,只有踩过的坑才是你自己的。
如何让你的DirectX 11学习之路更为平坦?在此我给出几点调试相关的建议:
- 没学会单步调试、断点调试的一定要先去学会
- 在调试程序的时候一定要留意输出窗口(来源为调试),一些D3D相关的函数运行失败都会在这里有十分详细的反馈。了解这个可以省去你很多开发的时间,避免不必要的查找,这一点十分重要!
- 学会使用Visual Studio自带的图形调试器,如果你现在使用的是别的图形调试器则可以跳过。
- 善于利用一些函数返回的
HRESULT类型错误码,可以使用我这边的DXTrace库来了解错误码的具体含义,也可以使用DirectX SDK中的Utilities\bin\x86\DXErr.exe来查询
下面是一个尝试使用显示适配器创建D3D设备引发的错误:

注意:
1. 考虑到现在DXTK库只是用到了它里面的键鼠类和纹理加载,现在已经单独提取出来使用。
2. 该教程在Github有专门配套的项目源码,读者可以自行下载。
3. 现在某些章节会有一些练习题,除了龙书里面有的部分进行挑选外,自己也尝试出了一些题目。
4. 本教程并不能代表Direct3D的方方面面,你还需要善于利用下面参考资料中给予的MSDN文档来查询信息。
由于博主现在要开始准备考研了,因此本教程将会长期暂停出新内容直到明年再继续
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编译着色器的三种方法 | 第4版 | 2018/12/4 | 2019/3/20 |
| Visual Studio图形调试器详细使用教程 | 第5版 | 2018/9/13 | 2019/4/18 |
| 深入理解HLSL常量缓冲区打包规则 | 第1版 | 2018/7/27 | 2018/7/27 |
| HLSL中矩阵的内存布局和mul函数探讨 | 第2版 | 2018/10/19 | 2019/1/10 |
| 深入理解与使用2D纹理资源 | 第5版 | 2019/1/13 | 2019/4/18 |
| 深入理解与使用缓冲区资源 | 第2版 | 2019/2/11 | 2019/3/20 |
实战篇
| 目录 | 版次 | 创建时间 | 修改时间 |
|---|---|---|---|
| 实现一个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 添加光照与常用几何模型 | 第18版 | 2018/5/28 | 2019/4/23 |
| 08 Direct2D与Direct3D互操作性以及利用DWrite显示文字 | 第7版 | 2018/5/29 | 2019/3/20 |
| 09 纹理映射与采样器状态 | 第17版 | 2018/7/12 | 2019/4/18 |
| 10 摄像机类 | 第17版 | 2018/7/16 | 2019/4/23 |
进阶篇
| 目录 | 版次 | 创建时间 | 修改时间 |
|---|---|---|---|
| 11 混合状态与光栅化状态 | 第12版 | 2018/7/21 | 2019/4/23 |
| 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 流输出阶段 | 第9版 | 2018/8/11 | 2019/4/23 |
| 17 利用几何着色器实现公告板效果 | 第11版 | 2018/8/19 | 2019/4/23 |
| 18 使用DirectXCollision库进行碰撞检测 | 第1版 | 2018/8/29 | 2018/8/29 |
| 19 模型加载:obj格式的读取及使用二进制文件提升读取效率 | 第13版 | 2018/9/11 | 2019/4/23 |
| 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 |
| ----长期停更---- | ------ | -------- | -------- |
参考资料
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
DirectX11 With Windows SDK--00 目录的更多相关文章
- 粒子系统与雨的效果 (DirectX11 with Windows SDK)
前言 最近在学粒子系统,看这之前的<<3D图形编程基础 基于DirectX 11 >>是基于Direct SDK的,而DXSDK微软已经很久没有更新过了并且我学的DX11是用W ...
- DirectX11 With Windows SDK--36 延迟渲染基础
前言 随着图形硬件变得越来越通用和可编程化,采用实时3D图形渲染的应用程序已经开始探索传统渲染管线的替代方案,以避免其缺点.其中一项最流行的技术就是所谓的延迟渲染.这项技术主要是为了支持大量的动态灯光 ...
- DirectX11 With Windows SDK--37 延迟渲染:光源剔除
前言 在上一章,我们主要介绍了如何使用延迟渲染,以及如何对G-Buffer进行一系列优化.而在这一章里,我们将从光源入手,讨论如何对大量的动态光源进行剔除,从而获得显著的性能提升. 在此之前假定读者已 ...
- DirectX11 With Windows SDK--10 摄像机类
前言 DirectX11 With Windows SDK完整目录:http://www.cnblogs.com/X-Jun/p/9028764.html 由于考虑后续的项目需要有一个比较好的演示环境 ...
- DirectX11 With Windows SDK--27 计算着色器:双调排序
前言 上一章我们用一个比较简单的例子来尝试使用计算着色器,但是在看这一章内容之前,你还需要了解下面的内容: 章节 26 计算着色器:入门 深入理解与使用缓冲区资源(结构化缓冲区/有类型缓冲区) Vis ...
- DirectX11 With Windows SDK--26 计算着色器:入门
前言 现在开始迎来所谓的高级篇了,目前计划是计算着色器部分的内容视项目情况,大概会分3-5章来讲述. DirectX11 With Windows SDK完整目录 Github项目源码 欢迎加入QQ群 ...
- DirectX11 With Windows SDK--25 法线贴图
前言 在很早之前的纹理映射中,纹理存放的元素是像素的颜色,通过纹理坐标映射到目标像素以获取其颜色.但是我们的法向量依然只是定义在顶点上,对于三角形面内一点的法向量,也只是通过比较简单的插值法计算出相应 ...
- DirectX11 With Windows SDK--24 Render-To-Texture(RTT)技术的应用
前言 尽管在上一章的动态天空盒中用到了Render-To-Texture技术,但那是针对纹理立方体的特化实现.考虑到该技术的应用层面非常广,在这里抽出独立的一章专门来讲有关它的通用实现以及各种应用. ...
- DirectX11 With Windows SDK--23 立方体映射:动态天空盒的实现
前言 上一章的静态天空盒已经可以满足绝大部分日常使用了.但对于自带反射/折射属性的物体来说,它需要依赖天空盒进行绘制,但静态天空盒并不会记录周边的物体,更不用说正在其周围运动的物体了.因此我们需要在运 ...
- DirectX11 With Windows SDK--01 DirectX11初始化
前言 由于个人觉得龙书里面第4章提供的Direct3D 初始化项目封装得比较好,而且DirectX SDK Samples里面的初始化程序过于精简,不适合后续使用,故选择了以Init Direct3D ...
随机推荐
- Scrapy 框架流程详解
框架流程图 Scrapy 使用了 Twisted 异步非阻塞网络库来处理网络通讯,整体架构大致如下(绿线是数据流向): 简单叙述一下每层图的含义吧: Spiders(爬虫):它负责处理所有Respon ...
- 逻辑回归&线性支持向量机
代码: # -*- coding: utf-8 -*- """ Created on Tue Jul 17 10:13:20 2018 @author: zhen &qu ...
- Redmine入门-安装
Redmine提供了两种方式安装,如果仅仅只是使用Redmine,建议采用一键安装的方式,快捷方便.如果需要做二次开发或者更多的个性化处理,可以采用源码安装方式,下面分别介绍两种安装方式. ----- ...
- python接口自动化-post请求4
云盘登录实操案例: 代码参考: # coding:utf-8 import requests ''' https的请求相对于http安全级别高,需要验证SSL证书 import urllib3 使用这 ...
- Shell 全局变量、环境变量和局部变量
Shell 变量的作用域(Scope),就是 Shell 变量的有效范围(可以使用的范围). 在不同的作用域中,同名的变量不会相互干涉,就好像 A 班有个叫小明的同学,B 班也有个叫小明的同学,虽然他 ...
- MYSQL的information_schema数据库中你可以得到的信息!!!
1.COLUMNS 记录了所有表字段的一些基本信息,例如权限信息等. 2:TABLES :使用该表可以查询每一个表的详细信息,例如数据占用空间大小.索引大小以及表的更新时间以及表的行数等 3:视图 可 ...
- 微信连wifi认证
官网 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444894086 https://blog.csdn.net/u0116 ...
- 《.NET和Java之争》 读后感
原文地址:https://www.cnblogs.com/adalovelacer/p/dotnet-vs-java.html 这是博客园被推荐上首页的文章,本着好学的心态,点进去拜读... 我也不清 ...
- 你所不知道的ASP.NET Core MVC/WebApi基础系列(二)
前言 好久没冒泡了,算起来估计有快半年没更新博客了,估计是我第一次停更如此之久,人总有懒惰的时候,时间越长越懒惰,但是呢,不学又不行,持续的惰性是不行dei,要不然会被时光所抛弃,技术所淘汰,好吧,进 ...
- Word报告自动生成(例如 导出数据库结构)
将很早之前写的一个小组件重新整理优化一下,做成一个通用的功能.适用于导出数据库的结构(表.字段等)到Word或将体检数据自动生成Word版的体检报告等.代码:Github 一.主要需要完成功能: 1. ...