DirectX11 With Windows SDK

DirectX11 With Windows SDK--37 延迟渲染:光源剔除

前言 在上一章,我们主要介绍了如何使用延迟渲染,以及如何对G-Buffer进行一系列优化。而在这一章里,我们将从光源入手,讨论如何对大量的动态光源进行剔除,从而获得显著的性能提升。 在此之前假定读者已经读过上一章,并熟悉了如下内容: 计算着色器 结构化缓冲区 DirectX11 With Windo ... »

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

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

DirectX11 With Windows SDK--02 顶点/像素着色器的创建、顶点缓冲区

由于在Direct3D 11中取消了固定管线,要想绘制图形必须要了解可编程渲染管线的流程,一个能绘制出图形的渲染管线最少需要有这两个可编程着色器:顶点着色器和像素着色器。 在阅读本章内容之前,你还需要先浏览下面的章节: 章节 HLSL编译着色器的三种方法 学习目标: 初步了解渲染管线 能够动手编写第一个顶点着色器和像素着色器 掌握HLSL编译着色器的方法 掌握将着色器绑定到渲染管线上 »

DirectX11 With Windows SDK--04 变换

前言 这一章涉及的是常用的矩阵变换,绝大部分内容节选自龙书,以帮助大家构建矩阵与2D/3D空间的数学联系。 学习目标: 了解Direct3D的一些内在规定 掌握矩阵变换与2D/3D空间的联系 熟悉3D »

X-Jun

DirectX11 With Windows SDK--03 索引缓冲区、常量缓冲区

一个立方体有8个顶点,然而绘制一个立方体需要画12个三角形,如果按照前面的方法绘制的话,则需要提供36个顶点,而且这里面的顶点数据会重复4次甚至5次。这样的绘制方法会占用大量的内存空间。 接下来会讲另外一种绘制方法,可以只提供立方体的8个顶点数据,然后用一个索引数组来指代使用哪些顶点,按怎样的顺序绘制。 在阅读本章之前,先要了解下面的内容: 章节 02 顶点/像素着色器的创建、顶点缓冲区 »

DirectX11 With Windows SDK--00 目录

从第一次接触DirectX 11到现在已经有将近三年的时间了。记得当初学习DirectX 11,在用龙书的源码配置项目运行环境的时候都花了好几天的时间才搞定,又因为书中的代码的开发环境(VS 2010)与现在的情况有些冲突,还得忍受上千个无法避免的编译警告,不得不视警告为无物。而且里面的代码使用了Microsoft DirectX SDK(June 2010)开发包和里面的Effects 11框架 »

DirectX11 With Windows SDK--32 SSAO(屏幕空间环境光遮蔽)

由于性能的限制,实时光照模型往往会忽略间接光因素(即场景中其他物体所反弹的光线)。但在现实生活中,大部分光照其实是间接光。在第7章里面的光照方程里面引入了环境光项: \[C_a = \mathbf{A_L}\otimes\mathbf{m_d} \] 其中颜色\(\mathbf{A_L}\)表示的是从某光源发出,经过环境光反射而照射到物体表面的间接光总量。漫反射\(\mathbf{m_d}\) »

DirectX11 With Windows SDK--06 键盘和鼠标输入

前言 提供键鼠输入可以说是一个游戏的必备要素。在这里,我们不使用DirectInput,而是使用Windows消息处理机制中的Raw Input,不过要从头开始实现会让事情变得很复杂。DXTK提供了鼠 »

X-Jun

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

在上一章,我们知道了如何使用几何着色器来重新组装图元,比如从一个三角形分裂成三个三角形。但是为了实现更高阶的分形,我们必须要从几何着色器拿到输出的顶点。这里我们可以使用可选的流输出阶段来拿到顶点集合。 注意: 本章末尾有大量的GIF动图! 在此之前需要额外了解的章节如下: 章节回顾 15 几何着色器初探 Visual Studio图形调试器详细使用教程(编程捕获部分) Dire »

DirectX11 With Windows SDK--25 法线贴图

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

DirectX11 With Windows SDK--31 阴影映射

前言 阴影既暗示着光源相对于观察者的位置关系,也从侧面传达了场景中各物体之间的相对位置。本章将起底最基础的阴影映射算法,而像复杂如级联阴影映射这样的技术,也是在阴影映射的基础上发展而来的。 从本章开始 »

X-Jun

DirectX11 With Windows SDK--24 Render-To-Texture(RTT)技术的应用

尽管在上一章的动态天空盒中用到了Render-To-Texture技术,但那是针对纹理立方体的特化实现。考虑到该技术的应用层面非常广,在这里抽出独立的一章专门来讲有关它的通用实现以及各种应用。 章节回顾 深入理解与使用2D纹理资源(重点阅读ScreenGrab库) DirectX11 With Windows SDK完整目录 Github项目源码 欢迎加入QQ群: 727623616 »

DirectX11 With Windows SDK--14 深度测试

当使用加法/减法/乘法颜色混合,或者使用透明混合的时候,在经过深度测试时可能会引发一些问题。例如现在我们需要使用加法混合来绘制一系列对象,而这些对象彼此之间不会相互阻挡。若我们仍使用原来的深度测试,就必须保证某一像素下的所有片元需要按照从远到近的顺序来进行绘制,但这很难做到,尤其在绘制一些几何体的时候可能会出现在前面的像素片元挡住了后面的像素片元的情况。现在,我们有能力通过调整深度测试这一行为,来 »

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

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

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

前言 现在开始迎来所谓的高级篇了,目前计划是计算着色器部分的内容视项目情况,大概会分3-5章来讲述。 DirectX11 With Windows SDK完整目录 Github项目源码 欢迎加入QQ群: 727623616 可以一起探讨DX11,以及有什么问题也可以在这里汇报。 概述 这里所使用的计算着色器实际上是属于DirectCompute的一部分,DirectCompute是一种应用程序编 »