DirectX11 With Windows SDK
文章平均质量分 88
尽管目前DX12已经出了一段时间,但DX11仍是当今市场的主流。该系列摒弃了时隔多年的DirectX SDK以及未来可能会被抛弃的Effects11框架,使用Visual Studio 2017中的Windows SDK和HLSL编译器来进行Direct3D 11的开发。
X_Jun96
与DX结下的不解之缘
展开
-
DirectX11 With Windows SDK--36 延迟渲染基础
随着图形硬件变得越来越通用和可编程化,采用实时3D图形渲染的应用程序已经开始探索传统渲染管线的替代方案,以避免其缺点。其中一项最流行的技术就是所谓的延迟渲染。这项技术主要是为了支持大量的动态灯光,而不需要一套复杂的着色器程序。原创 2022-03-05 00:11:22 · 1485 阅读 · 0 评论 -
DirectX11 With Windows SDK--35 粒子系统
前言在这一章中,我们主要关注的是如何模拟一系列粒子,并控制它们运动。这些粒子的行为都是类似的,但它们也带有一定的随机性。这一堆粒子的几何我们叫它为粒子系统,它可以被用于模拟一些比较现象,如:火焰、雨、烟雾、爆炸、法术效果等。在这一章开始之前,你需要先学过如下章节:章节11 混合状态15 几何着色器初探16 流输出阶段17 利用几何着色器实现公告板效果学习目标:熟悉如何利用几何着色器和流输出阶段来高效存储、渲染粒子了解我们如何利用基本的物理概念来让我们的粒原创 2020-08-01 21:39:09 · 601 阅读 · 0 评论 -
DirectX11 With Windows SDK--34 位移贴图
前言在前面的章节中,我们学到了法线贴图和曲面细分。现在我们可以将这两者进行结合以改善效果,因为法线贴图仅仅只是改善了光照的细节,但它并没有从根本上改善几何体的细节。从某种意义上来说,法线贴图只是一个光照的小把戏。接下来我们将会学习如何使用位移贴图来改善网格细节。在此之前你需要了解如下章节:章节25 法线贴图33 曲面细分阶段(Tessellation)学习目标:了解位移贴图熟悉如何用曲面细分来改善网格细节DirectX11 With Windows SDK完整目原创 2020-08-01 21:35:11 · 520 阅读 · 0 评论 -
DirectX11 With Windows SDK--33 曲面细分阶段(Tessellation)
前言曲面细分是Direct3D 11带来的其中一项重要的新功能。它引入了两个可编程着色器阶段以及一个固定的镶嵌处理过程。简单来说,曲面细分技术可以将几何体细分为更小的三角形,并以某种方式把这些新生成的顶点偏移到合适的位置,从而以增加三角形数量的方式丰富网格细节。但为什么不在创建网格之初就直接赋予它高模(high-poly,高面数多边形)的细节呢?以下是使用曲面细分的3个理由:基于GPU实现动态LOD(Level of Detail,细节级别)。可以根据网格与摄像机的距离或依据其他因素来调整其细节。比如原创 2020-08-01 21:32:33 · 1150 阅读 · 0 评论 -
DirectX11 With Windows SDK--32 SSAO(屏幕空间环境光遮蔽)
前言由于性能的限制,实时光照模型往往会忽略间接光因素(即场景中其他物体所反弹的光线)。但在现实生活中,大部分光照其实是间接光。在第7章里面的光照方程里面引入了环境光项:Ca=AL⊗mdC_a = \mathbf{A_L}\otimes\mathbf{m_d}Ca=AL⊗md其中颜色AL\mathbf{A_L}AL表示的是从某光源发出,经过环境光反射而照射到物体表面的间接光总量。漫反射md\mathbf{m_d}md则是物体表面根据漫反射率将入射光反射回的总量。这种方式的计算只是一种简化,原创 2020-08-01 21:27:25 · 859 阅读 · 0 评论 -
DirectX11 With Windows SDK--31 阴影映射
前言阴影既暗示着光源相对于观察者的位置关系,也从侧面传达了场景中各物体之间的相对位置。本章将起底最基础的阴影映射算法,而像复杂如级联阴影映射这样的技术,也是在阴影映射的基础上发展而来的。从本章开始我们将使用EffectHelper进一步简化所编写的特效,为此你可能还需要了解下面的章节:章节深入理解Effects11、使用着色器反射机制(Shader Reflection)实现一个复杂Effects框架学习目标:掌握基本的阴影映射算法熟悉投影纹理贴图的工作原理了解阴影图走原创 2020-08-01 21:19:35 · 653 阅读 · 0 评论 -
DirectX11--深入理解Effects11、使用着色器反射机制(Shader Reflection)实现一个复杂Effects框架
前言如果之前你是跟随本教程系列学习的话,应该能够初步了解Effects11(现FX11)的实现机制,并且可以编写一个简易的特效管理框架,但是随着特效种类的增多,要管理的着色器、资源等也随之变多。如果写了一套由多个HLSL着色器组成特效,就仍需要在C++端编写与HLSL相对应的特效框架,这样写起来依然是十分繁杂。以前学习龙书的DirectX11时,里面使用的正是Effects11框架,不得不承认用...原创 2020-03-28 10:41:15 · 863 阅读 · 0 评论 -
DirectX11 With Windows SDK--30 计算着色器:高斯模糊、索贝尔算子
前言到这里计算着色器的主线学习基本结束,剩下的就是再补充两个有关图像处理方面的应用。这里面包含了龙书11的图像模糊,以及龙书12额外提到的Sobel算子进行边缘检测。主要内容源自于龙书12,项目源码也基于此进行调整。学习目标:熟悉图像处理常用的卷积熟悉高斯模糊、Sobel算子DirectX11 With Windows SDK完整目录Github项目源码欢迎加入QQ群: 7276...原创 2020-02-15 17:23:31 · 1036 阅读 · 0 评论 -
DirectX11 With Windows SDK--29 计算着色器:内存模型、线程同步;实现顺序无关透明度(OIT)
前言由于透明混合在不同的绘制顺序下结果会不同,这就要求绘制前要对物体进行排序,然后再从后往前渲染。但即便是仅渲染一个物体(如上一章的水波),也会出现透明绘制顺序不对的情况,普通的绘制是无法避免的。如果要追求正确的效果,就需要对每个像素位置对所有的像素按深度值进行排序。本章将介绍一种仅DirectX11及更高版本才能实现的顺序无关的透明度(Order-Independent Transparenc...原创 2020-02-15 17:20:41 · 1610 阅读 · 0 评论 -
DirectX11--HLSL语法入门
前言编写本内容仅仅是为了完善当前的教程体系,入门级别的内容其实基本上都是千篇一律,仅有一些必要细节上的扩充。要入门HLSL,只是掌握入门语法,即便把HLSL的全部语法也吃透了也并不代表你就能着色器代码了,还需要结合到渲染管线中,随着教程的不断深入来不断学习需要用到的新的语法,然后尝试修改着色器,再根据实际需求自己编写着色器来实现特定的效果。注意:在翻阅HLSL文档的时候,要避开Effects...原创 2020-02-15 17:17:27 · 5469 阅读 · 1 评论 -
DirectX11 With Windows SDK--28 计算着色器:波浪(水波)
前言有关计算着色器的基础其实并不是很多。接下来继续讲解如何使用计算着色器实现水波效果,即龙书中所实现的水波。但是光看代码可是完全看不出来是在做什么的。个人根据书中所给的参考书籍找到了对应的实现原理,但是里面涉及到比较多的物理公式。因此,要看懂这一章需要有高数功底(求导、偏导、微分方程),我会把推导过程给列出来。本章演示项目还用到了其他的一些效果,在学习本章之前建议先了解如下内容:章节...原创 2020-01-22 09:22:53 · 1131 阅读 · 0 评论 -
DirectX11 With Windows SDK--04 变换
前言这一章涉及的是常用的矩阵变换,绝大部分内容节选自龙书,以帮助大家构建矩阵与2D/3D空间的数学联系。学习目标:了解Direct3D的一些内在规定掌握矩阵变换与2D/3D空间的联系熟悉3D变换与投影成像的过程熟悉2D变换与投影成像的过程DirectX11 With Windows SDK完整目录Github项目源码欢迎加入QQ群: 727623616 可以一起探讨DX11,...原创 2020-01-10 09:07:09 · 2001 阅读 · 2 评论 -
DirectX11--实现一个3D魔方(3)
前言(2019/1/9 09:23)上一章我们主要讲述了魔方的旋转,这个旋转真是有毒啊,搞完这个部分搭键鼠操作不到半天应该就可以搭完了吧…(2019/1/9 21:25)啊,真香有人发这张图片问我写魔方的目的是不是这个。。。噗现在光是键鼠相关的代码也搭了400行左右。。其中键盘相关的调用真的是毫无技术可言,重点实现基本上都被鼠标给耽搁了。章节实现一个3D魔方(1)...原创 2019-01-10 14:54:57 · 1198 阅读 · 1 评论 -
DirectX11--实现一个3D魔方(2)
前言上一章我们主要讲述了魔方的构造和初始化、纹理的准备工作。目前我还没有打算讲Direct3D 11关于底层绘图的实现,因此接下来这一章的重点是魔方的旋转。因为我们要的是能玩的魔方游戏,而不是一个观赏品。所以对旋转这一步的处理就显得尤其重要、精细,甚至可以展开很大的篇幅来讲述。现在光是为了实现旋转的这个动画就弄了我大概300行代码。章节实现一个3D魔方(1)实现一个3D...原创 2019-01-09 08:34:07 · 1520 阅读 · 0 评论 -
DirectX11--实现一个3D魔方(1)
前言可以说,魔方跟我的人生也有一定的联系。在高中的学校接触到了魔方社,那时候的我虽然也能够还原魔方,可看到大神们总是可以非常快地还原,为此我也走上了学习高级公式CFOP的坑。当初学习的网站是在魔方小站,不过由于公式太多了,那一年主要也就学会了顶层公式PLL和底二层公式F2L,最好的时候大概30s能够复原一个魔方,不过后来还是退坑了。然后到了大学,参加考核的时候被要求用DirectX9来实现考...原创 2019-01-08 11:23:58 · 3218 阅读 · 1 评论 -
DirectX11 With Windows SDK--27 计算着色器:双调排序
前言上一章我们用一个比较简单的例子来尝试使用计算着色器,但是在看这一章内容之前,你还需要了解下面的内容:章节26 计算着色器:入门深入理解与使用缓冲区资源这一章我们继续用一个计算着色器的应用实例作为切入点,进一步了解相关知识。DirectX11 With Windows SDK完整目录Github项目源码欢迎加入QQ群: 727623616 可以一起探讨DX...原创 2019-02-19 17:57:21 · 996 阅读 · 0 评论 -
DirectX11--深入理解与使用缓冲区资源
前言在Direct3D 11中,缓冲区属于其中一种资源类型,它在内存上的布局是一维线性的。根据HLSL支持的类型以及C++的使用情况,缓冲区可以分为下面这些类型:顶点缓冲区(Vertex Buffer)索引缓冲区(Index Buffer)常量缓冲区(Constant Buffer)有类型的缓冲区(Typed Buffer)结构化缓冲区(Structured Buffer)追加/消...原创 2019-02-19 17:48:58 · 2860 阅读 · 3 评论 -
DirectX11 With Windows SDK--26 计算着色器:入门
前言现在开始迎来所谓的高级篇了,目前计划是计算着色器部分的内容视项目情况,大概会分3-5章来讲述。DirectX11 With Windows SDK完整目录Github项目源码欢迎加入QQ群: 727623616 可以一起探讨DX11,以及有什么问题也可以在这里汇报。概述GPU通常被设计为从一个位置或连续的位置读取并处理大量的内存数据(即流操作),而CPU则被设计为专门处理随机内存的...原创 2019-01-31 11:03:35 · 1186 阅读 · 0 评论 -
DirectX11 With Windows SDK--25 法线贴图
前言在很早之前的纹理映射中,纹理存放的元素是像素的颜色,通过纹理坐标映射到目标像素以获取其颜色。但是我们的法向量依然只是定义在顶点上,对于三角形面内一点的法向量,也只是通过比较简单的插值法计算出相应的法向量值。这对平整的表面比较有用,但无法表现出内部粗糙的表面。在这一章,你将了解如何获取更高精度的法向量以描述一个粗糙平面。DirectX11 With Windows SDK完整目录Githu...原创 2019-01-08 11:22:10 · 1108 阅读 · 0 评论 -
DirectX11 With Windows SDK--24 Render-To-Texture(RTT)技术的应用、使用ScreenGrab保存纹理到文件
前言尽管在上一章的动态天空盒中用到了Render-To-Texture技术,但那是针对纹理立方体的特化实现。考虑到该技术的应用层面非常广,在这里抽出独立的一章专门来讲有关它的通用实现以及各种应用。此外,这里还会讲到如何使用DirectXTex的ScreenGrab来保存纹理,可以说是干货满满了。如果想要看Render-To-Texture在动态天空盒的应用,可以点此回顾:章节...原创 2018-11-18 15:51:32 · 1276 阅读 · 0 评论 -
DirectX11 With Windows SDK--23 立方体映射:动态天空盒的实现
前言上一章的静态天空盒已经可以满足绝大部分日常使用了。但对于自带反射/折射属性的物体来说,它需要依赖天空盒进行绘制,但静态天空盒并不会记录周边的物体,更不用说正在其周围运动的物体了。因此我们需要在运行期间构建动态天空盒,将周边物体绘制入当前的动态天空盒。没了解过静态天空盒的读者请先移步到下面的链接:章节回顾22 立方体映射:静态天空盒的读取与实现DirectX11 W...原创 2018-11-06 10:38:24 · 1645 阅读 · 0 评论 -
DirectX11 With Windows SDK--22 立方体映射:静态天空盒的读取与实现
前言从现在开始可以说算是要进入到高级主题部分了。这一章我们主要学习由6个纹理所构成的立方体映射,以及用它来实现一个静态天空盒。DirectX11 With Windows SDK完整目录Github项目源码欢迎加入QQ群: 727623616 可以一起探讨DX11,以及有什么问题也可以在这里汇报。立方体映射(Cube Mapping)一个立方体(通常是正方体)包含六个面,对于立方体映射...原创 2018-10-28 23:22:40 · 1687 阅读 · 0 评论 -
DirectX11 With Windows SDK--21 鼠标拾取
前言由于最近在做项目,不得不大幅减慢更新速度。现在可能一个月1-2章。拾取是一项非常重要的技术,不论是电脑上用鼠标操作,还是手机的触屏操作,只要涉及到UI控件的选取则必然要用到该项技术。除此之外,一些类似魔兽争霸3、星际争霸2这样的3D即时战略游戏也需要通过拾取技术来选中角色。给定在2D屏幕坐标系中由鼠标选中的一点,并且该点对应的正是3D场景中某一个对象表面的一点。 现在我们要做的,就是怎么...原创 2018-10-21 17:08:12 · 1100 阅读 · 0 评论 -
DirectX11 With Windows SDK--20 硬件实例化与视锥体裁剪
前言这一章将了解如何在DirectX 11利用硬件实例化技术高效地绘制重复的物体,以及使用视锥体裁剪技术提前将位于视锥体外的物体进行排除。在此之前需要额外了解的章节如下:章节回顾18 使用DirectXCollision库进行碰撞检测19 模型加载:obj格式的读取及使用二进制文件提升读取效率DirectX11 With Windows SDK完整目录Gith...原创 2018-09-26 09:21:51 · 1534 阅读 · 0 评论 -
DirectX11 With Windows SDK--19 模型加载:obj格式的读取及使用二进制文件提升读取效率
前言一个模型通常是由三个部分组成:网格、纹理、材质。在一开始的时候,我们是通过Geometry类来生成简单几何体的网格。但现在我们需要寻找合适的方式去表述一个复杂的网格,而且包含网格的文件类型多种多样,对应的描述方式也存在着差异。这一章我们主要研究obj格式文件的读取。纹理映射回顾DirectX11 With Windows SDK完整目录Github项目源码.obj格式...原创 2018-09-11 21:48:05 · 2164 阅读 · 0 评论 -
DirectX11 With Windows SDK--18 使用DirectXCollision库进行碰撞检测
在DirectX SDK中,碰撞检测的相关函数位于xnacollision.h中。但是现在,前面所实现的相关函数都已经转移到Windows SDK的DirectXCollision.h中,并且处于名称空间DirectX内。这里面主要包含了四种包围盒(Bounding Volumes),并且是以类的形式实现的:BoundingSphere类–包围球(Bounding Box)Bounding...原创 2018-08-30 00:15:01 · 1313 阅读 · 2 评论 -
DirectX11 With Windows SDK--17 利用几何着色器实现公告板效果
上一章我们知道了如何使用几何着色器将顶点通过流输出阶段输出到绑定的顶点缓冲区。接下来我们继续利用它来实现一些新的效果,在这一章,你将了解: 1. 实现公告板效果 2. Alpha-To-Coverage 3. 对GPU资源进行读/写操作 4. 纹理数组 5. 实现雾效DirectX11 With Windows SDK完整目录Github项目源码目录实现雾效HLSL...原创 2018-08-30 00:13:36 · 907 阅读 · 6 评论 -
DirectX11 With Windows SDK--16 流输出阶段
前言流输出阶段流输出状态的配置ID3D11DeviceContext::SOSetTargets方法–绑定流输出对应用于接收数据的顶点缓冲区ID3D11DeviceContext::SOGetTargets方法–获取绑定在流输出阶段的顶点缓冲区ID3D11Device::CreateGeometryShaderWithStreamOutput方法–创建带流输出阶段的几何着色器绘...原创 2018-09-06 12:18:42 · 1909 阅读 · 5 评论 -
DirectX11 With Windows SDK--15 几何着色器初探
前言从这一部分开始,感觉就像是踏入了无人深空一样,在之前初学DX11的时候,这部分内容都是基本上跳过的,现在打算重新认真地把它给拾回来。DirectX11 With Windows SDK完整目录Github项目源码几何着色器首先用一张图来回顾一下渲染管线的各个阶段,目前为止我们接触的着色器有顶点着色器和像素着色器,而接触到的渲染管线阶段有:输入装配阶段、顶点着色阶段、光栅化阶...原创 2018-08-09 09:03:32 · 1295 阅读 · 0 评论 -
DirectX11 With Windows SDK--14 深度测试
前言交换律深度测试关闭深度测试开启深度测试但关闭深度写入利用深度测试和模板测试来绘制闪电特效与其镜面RenderStates类的变化加法混合关闭深度测试允许深度测试,但不写入深度值的状态BasicFX类的变化BasicFX::SetDrawBoltAnimNoDepthTest方法BasicFX::SetDrawBoltAnimNoDepthWrite方法Ba...原创 2018-08-07 09:07:24 · 1264 阅读 · 0 评论 -
DirectX11 With Windows SDK--13 动手实现一个简易Effects框架、阴影效果绘制
前言到现在为止,所有的教程项目都没有使用Effects11框架类来管理资源。因为在D3DCompile API (#47)版本中,如果你尝试编译fx_5_0的效果文件,会收到这样的警告:X4717: Effects deprecated for D3DCompiler_47在未来的版本中,D3DCompiler可能会停止对FX11的支持,所以我们需要自行去管理各种特效,并改用HLSL编译器去...原创 2018-09-26 09:11:04 · 1605 阅读 · 2 评论 -
DirectX11 With Windows SDK--12 深度/模板状态
前言深度/模板测试深度测试模板测试前言DirectX11 With Windows SDK完整目录:http://www.cnblogs.com/X-Jun/p/9028764.html深度/模板测试使用的是与后备缓冲区同等分辨率大小的缓冲区,每个元素的一部分连续位用于深度测试,其余的则用作模板测试。两个测试的目的都是为了能够根据深度/模板状态需求的设置来选择...原创 2018-07-30 08:31:31 · 2141 阅读 · 2 评论 -
DirectX11 With Windows SDK--11 混合状态
前言DirectX11 With Windows SDK完整目录:http://www.cnblogs.com/X-Jun/p/9028764.html虽然这一部分的内容主讲混合,但这里还需提及一下,关于渲染管线可以绑定的状态主要有如下四种: 1. 采样器状态(像素着色阶段) 2. 光栅化状态(光栅化阶段) 3. 混合状态(输出合并阶段) 4. 深度/模板状态(输出合并阶段)实...原创 2018-07-21 15:03:57 · 1964 阅读 · 2 评论 -
DirectX11 With Windows SDK--10 摄像机类
前言世界矩阵和观察矩阵前言由于考虑后续的项目需要有一个比较好的演示环境,因此这里将先从摄像机这个专题入手。在这之前,需要复习一下有关世界矩阵和观察矩阵的内容。项目源码点此:https://github.com/MKXJun/DX11-Without-DirectX-SDK世界矩阵和观察矩阵若已知物体所在位置Qw=(Qx,Qy,Qz,1)Qw=(Qx,Qy,...原创 2018-07-16 17:08:39 · 2377 阅读 · 0 评论 -
DirectX11--深入理解与使用2D纹理资源
前言写教程到现在,我发现有关纹理资源的一些解说和应用都写的太过分散,导致连我自己找起来都不方便。现在决定把这部分的内容整合起来,尽可能做到一篇搞定所有2D纹理相关的内容,其中包括:DDSTextureLoader和WICTextureLoader2D纹理的一般创建方法2D纹理数组的一般创建方法2D纹理立方体的一般创建方法纹理子资源纹理资源的完整复制纹理子资源指定区域的复制纹理从...原创 2019-01-14 21:06:15 · 7880 阅读 · 6 评论 -
DirectX11 With Windows SDK--09 纹理映射与采样器状态
回到 DirectX11–使用Windows SDK来进行开发:http://www.cnblogs.com/X-Jun/p/9028764.html在之前的DirectX SDK中,纹理的读取使用的是D3DX11CreateShaderResourceViewFromFile函数,现在在Windows SDK中已经没有这些函数,我们需要找到DDSTextureLoader和WICTextur...原创 2018-07-12 09:49:14 · 3229 阅读 · 0 评论 -
DirectX11 With Windows SDK--08 Direct2D与Direct3D互操作性以及利用DWrite显示文字
回到 DirectX11–使用Windows SDK来进行开发:https://blog.csdn.net/X_Jun96/article/details/80293670在DX11,要显示文字可以说是一件比较麻烦的事情。DX9诸如Id3dXFont用于显示文字的接口类都已经被抛弃掉了。目前行之有效的两种显示文字的方法如下:使用包含文字的位图/矢量图,然后通过一定的方式来获取对应文字的矩...原创 2018-06-21 14:54:54 · 2597 阅读 · 2 评论 -
DirectX11 With Windows SDK--07 添加光照与常用几何模型、光栅化状态
回到 DirectX11–使用Windows SDK来进行开发:http://www.cnblogs.com/X-Jun/p/9028764.html对于3D游戏来说,合理的光照可以让游戏显得更加真实。接下来会介绍光照的各种分量,以及常见的光照模型。除此之外,该项目还用到了多个常量缓冲区,因此还会提及HLSL的常量缓冲区打包规则以及如何设置多个常量缓冲区。项目源码点此:https://gi...原创 2018-06-21 14:51:13 · 3054 阅读 · 1 评论 -
DirectX11--HLSL常量缓冲区打包规则
HLSL常量缓冲区打包规则1. C++中的结构体数据是以字节流的形式传输给HLSL的例1.12. HLSL常量缓冲区中的向量不允许拆分例2.1例2.23. HLSL常量缓冲区中多个相邻的变量若有空缺则优先打包进同一个4D向量中例3.1例3.24. 对于在常量缓冲区的结构体,也会进行打包操作例4.1例4.25. 对于在常量缓冲区的数组,需要特殊对待例5....原创 2018-07-30 13:01:37 · 1424 阅读 · 0 评论 -
DirectX11 With Windows SDK--05 DirectXMath数学库
回到 DirectX11 使用Windows SDK来进行开发xnamath.h原本是位于DirectX SDK的一个数学库,但是现在Windows SDK包含的数学库已经抛弃掉原来的xnamath.h,并演变成了现在的DirectXMath.h。其实本质上并没有多大区别,只是将原来的xna数学函数移植到了这里,并多了一层名称空间DirectX。SIMD与SSE2指令集加速SIMD(单...原创 2018-05-15 17:18:48 · 2324 阅读 · 0 评论