自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

X_Jun的博客

一个游戏/图形爱好者。主战场:https://www.cnblogs.com/X-Jun/

  • 博客(53)
  • 资源 (2)
  • 收藏
  • 关注

原创 CSDN停更

由于更新平台较多难以管理,现在只会在下面两个站点更新:github电子书版:https://directx11.tech博客园:https://www.cnblogs.com/X-Jun/p/9028764.html

2022-05-10 16:55:20 288

原创 DirectX11 With Windows SDK--00 目录

DirectX11–使用Windows SDK来进行开发在看龙书(Introduction to 3D Game Programming with Directx 11)的时候,里面所使用的开发工具包为Microsoft DirectX SDK(June 2010),该开发包到现在也已经经历了8年左右。而现在,微软其实已经将DX的相关组件随同Windows SDK一同更新,并不再对Direct...

2018-05-12 18:16:58 16278 6

原创 DirectX11 With Windows SDK--36 延迟渲染基础

随着图形硬件变得越来越通用和可编程化,采用实时3D图形渲染的应用程序已经开始探索传统渲染管线的替代方案,以避免其缺点。其中一项最流行的技术就是所谓的延迟渲染。这项技术主要是为了支持大量的动态灯光,而不需要一套复杂的着色器程序。

2022-03-05 00:11:22 1336

原创 DirectX11 With Windows SDK--35 粒子系统

前言在这一章中,我们主要关注的是如何模拟一系列粒子,并控制它们运动。这些粒子的行为都是类似的,但它们也带有一定的随机性。这一堆粒子的几何我们叫它为粒子系统,它可以被用于模拟一些比较现象,如:火焰、雨、烟雾、爆炸、法术效果等。在这一章开始之前,你需要先学过如下章节:章节11 混合状态15 几何着色器初探16 流输出阶段17 利用几何着色器实现公告板效果学习目标:熟悉如何利用几何着色器和流输出阶段来高效存储、渲染粒子了解我们如何利用基本的物理概念来让我们的粒

2020-08-01 21:39:09 544

原创 DirectX11 With Windows SDK--34 位移贴图

前言在前面的章节中,我们学到了法线贴图和曲面细分。现在我们可以将这两者进行结合以改善效果,因为法线贴图仅仅只是改善了光照的细节,但它并没有从根本上改善几何体的细节。从某种意义上来说,法线贴图只是一个光照的小把戏。接下来我们将会学习如何使用位移贴图来改善网格细节。在此之前你需要了解如下章节:章节25 法线贴图33 曲面细分阶段(Tessellation)学习目标:了解位移贴图熟悉如何用曲面细分来改善网格细节DirectX11 With Windows SDK完整目

2020-08-01 21:35:11 466

原创 DirectX11 With Windows SDK--33 曲面细分阶段(Tessellation)

前言曲面细分是Direct3D 11带来的其中一项重要的新功能。它引入了两个可编程着色器阶段以及一个固定的镶嵌处理过程。简单来说,曲面细分技术可以将几何体细分为更小的三角形,并以某种方式把这些新生成的顶点偏移到合适的位置,从而以增加三角形数量的方式丰富网格细节。但为什么不在创建网格之初就直接赋予它高模(high-poly,高面数多边形)的细节呢?以下是使用曲面细分的3个理由:基于GPU实现动态LOD(Level of Detail,细节级别)。可以根据网格与摄像机的距离或依据其他因素来调整其细节。比如

2020-08-01 21:32:33 944

原创 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 803

原创 DirectX11 With Windows SDK--31 阴影映射

前言阴影既暗示着光源相对于观察者的位置关系,也从侧面传达了场景中各物体之间的相对位置。本章将起底最基础的阴影映射算法,而像复杂如级联阴影映射这样的技术,也是在阴影映射的基础上发展而来的。从本章开始我们将使用EffectHelper进一步简化所编写的特效,为此你可能还需要了解下面的章节:章节深入理解Effects11、使用着色器反射机制(Shader Reflection)实现一个复杂Effects框架学习目标:掌握基本的阴影映射算法熟悉投影纹理贴图的工作原理了解阴影图走

2020-08-01 21:19:35 597

原创 DirectX11--深入理解Effects11、使用着色器反射机制(Shader Reflection)实现一个复杂Effects框架

前言如果之前你是跟随本教程系列学习的话,应该能够初步了解Effects11(现FX11)的实现机制,并且可以编写一个简易的特效管理框架,但是随着特效种类的增多,要管理的着色器、资源等也随之变多。如果写了一套由多个HLSL着色器组成特效,就仍需要在C++端编写与HLSL相对应的特效框架,这样写起来依然是十分繁杂。以前学习龙书的DirectX11时,里面使用的正是Effects11框架,不得不承认用...

2020-03-28 10:41:15 790

原创 DirectX11 With Windows SDK--30 计算着色器:高斯模糊、索贝尔算子

前言到这里计算着色器的主线学习基本结束,剩下的就是再补充两个有关图像处理方面的应用。这里面包含了龙书11的图像模糊,以及龙书12额外提到的Sobel算子进行边缘检测。主要内容源自于龙书12,项目源码也基于此进行调整。学习目标:熟悉图像处理常用的卷积熟悉高斯模糊、Sobel算子DirectX11 With Windows SDK完整目录Github项目源码欢迎加入QQ群: 7276...

2020-02-15 17:23:31 984

原创 DirectX11 With Windows SDK--29 计算着色器:内存模型、线程同步;实现顺序无关透明度(OIT)

前言由于透明混合在不同的绘制顺序下结果会不同,这就要求绘制前要对物体进行排序,然后再从后往前渲染。但即便是仅渲染一个物体(如上一章的水波),也会出现透明绘制顺序不对的情况,普通的绘制是无法避免的。如果要追求正确的效果,就需要对每个像素位置对所有的像素按深度值进行排序。本章将介绍一种仅DirectX11及更高版本才能实现的顺序无关的透明度(Order-Independent Transparenc...

2020-02-15 17:20:41 1525

原创 DirectX11--HLSL语法入门

前言编写本内容仅仅是为了完善当前的教程体系,入门级别的内容其实基本上都是千篇一律,仅有一些必要细节上的扩充。要入门HLSL,只是掌握入门语法,即便把HLSL的全部语法也吃透了也并不代表你就能着色器代码了,还需要结合到渲染管线中,随着教程的不断深入来不断学习需要用到的新的语法,然后尝试修改着色器,再根据实际需求自己编写着色器来实现特定的效果。注意:在翻阅HLSL文档的时候,要避开Effects...

2020-02-15 17:17:27 5103 1

原创 DirectX11 With Windows SDK--28 计算着色器:波浪(水波)

前言有关计算着色器的基础其实并不是很多。接下来继续讲解如何使用计算着色器实现水波效果,即龙书中所实现的水波。但是光看代码可是完全看不出来是在做什么的。个人根据书中所给的参考书籍找到了对应的实现原理,但是里面涉及到比较多的物理公式。因此,要看懂这一章需要有高数功底(求导、偏导、微分方程),我会把推导过程给列出来。本章演示项目还用到了其他的一些效果,在学习本章之前建议先了解如下内容:章节...

2020-01-22 09:22:53 1101

原创 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 1938 2

原创 DirectX11 With Windows SDK--27 计算着色器:双调排序

前言上一章我们用一个比较简单的例子来尝试使用计算着色器,但是在看这一章内容之前,你还需要了解下面的内容:章节26 计算着色器:入门深入理解与使用缓冲区资源这一章我们继续用一个计算着色器的应用实例作为切入点,进一步了解相关知识。DirectX11 With Windows SDK完整目录Github项目源码欢迎加入QQ群: 727623616 可以一起探讨DX...

2019-02-19 17:57:21 947

原创 DirectX11--深入理解与使用缓冲区资源

前言在Direct3D 11中,缓冲区属于其中一种资源类型,它在内存上的布局是一维线性的。根据HLSL支持的类型以及C++的使用情况,缓冲区可以分为下面这些类型:顶点缓冲区(Vertex Buffer)索引缓冲区(Index Buffer)常量缓冲区(Constant Buffer)有类型的缓冲区(Typed Buffer)结构化缓冲区(Structured Buffer)追加/消...

2019-02-19 17:48:58 2714 3

原创 DirectX11 With Windows SDK--26 计算着色器:入门

前言现在开始迎来所谓的高级篇了,目前计划是计算着色器部分的内容视项目情况,大概会分3-5章来讲述。DirectX11 With Windows SDK完整目录Github项目源码欢迎加入QQ群: 727623616 可以一起探讨DX11,以及有什么问题也可以在这里汇报。概述GPU通常被设计为从一个位置或连续的位置读取并处理大量的内存数据(即流操作),而CPU则被设计为专门处理随机内存的...

2019-01-31 11:03:35 1134

原创 DirectX11--深入理解与使用2D纹理资源

前言写教程到现在,我发现有关纹理资源的一些解说和应用都写的太过分散,导致连我自己找起来都不方便。现在决定把这部分的内容整合起来,尽可能做到一篇搞定所有2D纹理相关的内容,其中包括:DDSTextureLoader和WICTextureLoader2D纹理的一般创建方法2D纹理数组的一般创建方法2D纹理立方体的一般创建方法纹理子资源纹理资源的完整复制纹理子资源指定区域的复制纹理从...

2019-01-14 21:06:15 7521 6

原创 DirectX11--实现一个3D魔方(3)

前言(2019/1/9 09:23)上一章我们主要讲述了魔方的旋转,这个旋转真是有毒啊,搞完这个部分搭键鼠操作不到半天应该就可以搭完了吧…(2019/1/9 21:25)啊,真香有人发这张图片问我写魔方的目的是不是这个。。。噗现在光是键鼠相关的代码也搭了400行左右。。其中键盘相关的调用真的是毫无技术可言,重点实现基本上都被鼠标给耽搁了。章节实现一个3D魔方(1)...

2019-01-10 14:54:57 1107 1

原创 DirectX11--实现一个3D魔方(2)

前言上一章我们主要讲述了魔方的构造和初始化、纹理的准备工作。目前我还没有打算讲Direct3D 11关于底层绘图的实现,因此接下来这一章的重点是魔方的旋转。因为我们要的是能玩的魔方游戏,而不是一个观赏品。所以对旋转这一步的处理就显得尤其重要、精细,甚至可以展开很大的篇幅来讲述。现在光是为了实现旋转的这个动画就弄了我大概300行代码。章节实现一个3D魔方(1)实现一个3D...

2019-01-09 08:34:07 1470

原创 DirectX11--实现一个3D魔方(1)

前言可以说,魔方跟我的人生也有一定的联系。在高中的学校接触到了魔方社,那时候的我虽然也能够还原魔方,可看到大神们总是可以非常快地还原,为此我也走上了学习高级公式CFOP的坑。当初学习的网站是在魔方小站,不过由于公式太多了,那一年主要也就学会了顶层公式PLL和底二层公式F2L,最好的时候大概30s能够复原一个魔方,不过后来还是退坑了。然后到了大学,参加考核的时候被要求用DirectX9来实现考...

2019-01-08 11:23:58 3119 1

原创 DirectX11 With Windows SDK--25 法线贴图

前言在很早之前的纹理映射中,纹理存放的元素是像素的颜色,通过纹理坐标映射到目标像素以获取其颜色。但是我们的法向量依然只是定义在顶点上,对于三角形面内一点的法向量,也只是通过比较简单的插值法计算出相应的法向量值。这对平整的表面比较有用,但无法表现出内部粗糙的表面。在这一章,你将了解如何获取更高精度的法向量以描述一个粗糙平面。DirectX11 With Windows SDK完整目录Githu...

2019-01-08 11:22:10 1059

原创 DirectX11--教程项目无法编译、运行的解决方法

综述对于Win10系统的大多数用户来说,可以直接编译本教程对应的项目并运行。但也有部分用户由于某些原因可能会出现无法编译的情况。DirectX11 With Windows SDK完整目录欢迎加入QQ群: 727623616 可以一起探讨DX11,以及有什么问题也可以在这里汇报。与当前项目的Windows SDK版本不一致对于Visual Studio 2017,你可以点击项目-重定解决...

2018-12-29 11:17:29 2197

原创 DirectX11--ComPtr智能指针

综述DirectX11 With Windows SDK完整目录欢迎加入QQ群: 727623616 可以一起探讨DX11,以及有什么问题也可以在这里汇报。IUnknown接口类DirectX11的API是由一系列的COM组件来管理的,这些前缀带I的接口类最终都继承自IUnknown接口类。IUnknown的三个方法如下:方法描述IUnknown::AddRef内部...

2018-12-29 11:16:19 2363

原创 DirectX11--HR宏关于dxerr库的替代方案

DirectX11 With Windows SDK完整目录欢迎加入QQ群: 727623616 可以一起探讨DX11,以及有什么问题也可以在这里汇报。综述参考文章:https://blogs.msdn.microsoft.com/chuckw/2012/04/24/wheres-dxerr-lib/在龙书11中所使用的HR宏和dxerr库是一个比较实用的错误原因追踪工具。D3D中的某些函...

2018-12-25 11:12:19 1649

原创 DirectX11--HLSL编译着色器的三种方法

前言本教程不考虑Effects11(FX11),而是基于原始的HLSL。目前编译与加载着色器的方法如下:使用Visual Studio中的HLSL编译器,随项目编译期间一同编译,并生成.cso(Compiled Shader Object)对象文件,在运行期间加载该文件以读取字节码。使用Visual Studio中的HLSL编译器,随项目编译期间一同编译,并生成.inc或.h的头文件,着...

2018-12-15 22:44:05 3566

原创 DirectX11 With Windows SDK--24 Render-To-Texture(RTT)技术的应用、使用ScreenGrab保存纹理到文件

前言尽管在上一章的动态天空盒中用到了Render-To-Texture技术,但那是针对纹理立方体的特化实现。考虑到该技术的应用层面非常广,在这里抽出独立的一章专门来讲有关它的通用实现以及各种应用。此外,这里还会讲到如何使用DirectXTex的ScreenGrab来保存纹理,可以说是干货满满了。如果想要看Render-To-Texture在动态天空盒的应用,可以点此回顾:章节...

2018-11-18 15:51:32 1229

原创 DirectX11 With Windows SDK--23 立方体映射:动态天空盒的实现

前言上一章的静态天空盒已经可以满足绝大部分日常使用了。但对于自带反射/折射属性的物体来说,它需要依赖天空盒进行绘制,但静态天空盒并不会记录周边的物体,更不用说正在其周围运动的物体了。因此我们需要在运行期间构建动态天空盒,将周边物体绘制入当前的动态天空盒。没了解过静态天空盒的读者请先移步到下面的链接:章节回顾22 立方体映射:静态天空盒的读取与实现DirectX11 W...

2018-11-06 10:38:24 1571

原创 DirectX11 With Windows SDK--22 立方体映射:静态天空盒的读取与实现

前言从现在开始可以说算是要进入到高级主题部分了。这一章我们主要学习由6个纹理所构成的立方体映射,以及用它来实现一个静态天空盒。DirectX11 With Windows SDK完整目录Github项目源码欢迎加入QQ群: 727623616 可以一起探讨DX11,以及有什么问题也可以在这里汇报。立方体映射(Cube Mapping)一个立方体(通常是正方体)包含六个面,对于立方体映射...

2018-10-28 23:22:40 1652

原创 DirectX11--HLSL中矩阵的内存布局和mul函数探讨

前言说实话,我感觉这是一个大坑,不知道为什么要设计成这样混乱的形式。在我用的时候,以row_major矩阵,并且mul函数以向量左乘矩阵的形式来绘制时的确能够正常显示,并不会有什么感觉。但是也有人会遇到明明传的矩阵没有问题,却怎么样都绘制不出的情况;或者使用列矩阵,在mul函数用向量左乘的形式却又可以绘制出来的疑问。因此本文目的就是要扫清这些障碍。ps. 本问题由淡一抹夕霞提供。Direc...

2018-10-21 17:09:22 1194 6

原创 DirectX11 With Windows SDK--21 鼠标拾取

前言由于最近在做项目,不得不大幅减慢更新速度。现在可能一个月1-2章。拾取是一项非常重要的技术,不论是电脑上用鼠标操作,还是手机的触屏操作,只要涉及到UI控件的选取则必然要用到该项技术。除此之外,一些类似魔兽争霸3、星际争霸2这样的3D即时战略游戏也需要通过拾取技术来选中角色。给定在2D屏幕坐标系中由鼠标选中的一点,并且该点对应的正是3D场景中某一个对象表面的一点。 现在我们要做的,就是怎么...

2018-10-21 17:08:12 1048

原创 DirectX11 With Windows SDK--20 硬件实例化与视锥体裁剪

前言这一章将了解如何在DirectX 11利用硬件实例化技术高效地绘制重复的物体,以及使用视锥体裁剪技术提前将位于视锥体外的物体进行排除。在此之前需要额外了解的章节如下:章节回顾18 使用DirectXCollision库进行碰撞检测19 模型加载:obj格式的读取及使用二进制文件提升读取效率DirectX11 With Windows SDK完整目录Gith...

2018-09-26 09:21:51 1194

原创 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 1534 2

原创 Visual Studio图形调试器详细使用教程(基于DirectX11)

前言准备工作截取一帧画面图形调试器预览事件列表查看传入的缓冲区数据查看着色器资源视图中的纹理资源查看资源历史记录跟踪渲染管线各个阶段的状态管道阶段查看深度缓冲区资源查看该帧图片下某一像素的绘制历史着色器调试着色器反汇编总结前言对于DirectX程序开发者来说,学会使用Visual Studio Graphics Debugger(图形调试器...

2018-09-13 21:24:55 4789 1

原创 DirectX11 With Windows SDK--19 模型加载:obj格式的读取及使用二进制文件提升读取效率

前言一个模型通常是由三个部分组成:网格、纹理、材质。在一开始的时候,我们是通过Geometry类来生成简单几何体的网格。但现在我们需要寻找合适的方式去表述一个复杂的网格,而且包含网格的文件类型多种多样,对应的描述方式也存在着差异。这一章我们主要研究obj格式文件的读取。纹理映射回顾DirectX11 With Windows SDK完整目录Github项目源码.obj格式...

2018-09-11 21:48:05 2126

原创 DirectX11 With Windows SDK--16 流输出阶段

前言流输出阶段流输出状态的配置ID3D11DeviceContext::SOSetTargets方法–绑定流输出对应用于接收数据的顶点缓冲区ID3D11DeviceContext::SOGetTargets方法–获取绑定在流输出阶段的顶点缓冲区ID3D11Device::CreateGeometryShaderWithStreamOutput方法–创建带流输出阶段的几何着色器绘...

2018-09-06 12:18:42 1478 5

原创 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 1263 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 875 6

原创 DirectX11 With Windows SDK--15 几何着色器初探

前言从这一部分开始,感觉就像是踏入了无人深空一样,在之前初学DX11的时候,这部分内容都是基本上跳过的,现在打算重新认真地把它给拾回来。DirectX11 With Windows SDK完整目录Github项目源码几何着色器首先用一张图来回顾一下渲染管线的各个阶段,目前为止我们接触的着色器有顶点着色器和像素着色器,而接触到的渲染管线阶段有:输入装配阶段、顶点着色阶段、光栅化阶...

2018-08-09 09:03:32 948

原创 DirectX11 With Windows SDK--14 深度测试

前言交换律深度测试关闭深度测试开启深度测试但关闭深度写入利用深度测试和模板测试来绘制闪电特效与其镜面RenderStates类的变化加法混合关闭深度测试允许深度测试,但不写入深度值的状态BasicFX类的变化BasicFX::SetDrawBoltAnimNoDepthTest方法BasicFX::SetDrawBoltAnimNoDepthWrite方法Ba...

2018-08-07 09:07:24 1007

EffectHelper_With_Demo_09.zip

实现了一个功能比较简单,类似Effects11(FX11)的特效助理类。具体见https://blog.csdn.net/X_Jun96/article/details/105156980

2020-03-28

高速上手C++11/14/17

C++ 是一个用户群体相当大的语言。从 C++98 的出现到 C++11 的正式定稿经历了长达〸年多之 久的积累。C++14/17 则是作为对 C++11 的重要补充和优化,所有这些新标准中扩充的特性,给 C++ 这门语言注入了新的活力。那些还在坚持使用传统 C++(本书把 C++98 及其之前的 C++ 特性均称 之为传统 C++)而未接触过 C++11/14/17 的 C++ 程序员在见到诸如 Lambda 表达式这类全新特性 时,甚至会流露出『学的不是同一门语言』的惊叹之情。

2019-04-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除