DirectX
文章平均质量分 77
Zealot_Alie
诗比死好,花很美丽。
新博客地址是 https://zealie.me,有兴趣的话可以关注。
展开
-
DirectX 11 学习笔记-01【Device/Device Context/Resource/ResourceView/Swap Chain/Viewport】
目录Device和Device Context Resource和ResourceView Swap Chain和Viewport 参考资料计算机绘图本质上绘制的是一张2D的平面图像。DirectX作为底层绘图API,提供了一组软件接口,我们可以通过这组接口来控制绘图硬件。而一个DirectX程序完成的工作,就是把一系列的信息转换为一张2D平面图形,并让它显示在屏幕上。 D...原创 2018-08-14 23:15:39 · 607 阅读 · 0 评论 -
DirectX 11 学习笔记-Part2-4【Cubemap/贴图置换/阴影/屏幕空间环境光遮蔽】【原理篇】
代码已上传至GitHub,这部分对应的项目为NormalDisplacementSsao。运行项目时可以使用数字键1-3切换渲染的shader,另外按下z键可以看到SSAO生成的遮罩贴图。这部分内容较多,所以以介绍原理为主。另外在阅读源码时,为了剔除枝干让整体的代码更加一目了然,我用了模板和SFINAE(主要在SceneObject.h),如果看不懂的话也没有关系,不重要,关键是了解这些技术的...原创 2019-01-27 00:03:44 · 1483 阅读 · 0 评论 -
DirectX 11 学习笔记-Part2-3【地形/粒子】
相关代码已上传至Github,具体来说,这部分的对应的Project是TerrainParticleCube。项目运行的效果图如下,主要包括两部分内容,地形生成和简单的粒子效果。地形Terrain生成地形需要两个纹理来构建地图信息,其一是高度图,它用于存储地形的高度信息,根据高度信息我们可以构建出地形网格;其二是BlendTexture,它用于存储地图各个位置的纹理信息,将Blen...原创 2019-01-26 18:15:18 · 660 阅读 · 0 评论 -
DirectX 11 学习笔记-Part2-2【曲面细分】
【鸽了这么久终于下定决心把剩下的写完,给自己鼓掌。】概述之前的章节中我们跳过了曲面细分的部分,因为单独的曲面细分作用并不是非常大,往往需要结合其他技术来达到我们需要的效果。接下来的文章我们会使用到曲面细分,所以先对它做一个介绍。简单说,曲面细分就是将几何图元分成小的三角形,然后按照一定的规则对它们进行偏移,从而生成新的顶点。引入曲面细分的目的是为了提升模型细节。比起直接使用更高精...原创 2019-01-26 02:23:59 · 654 阅读 · 0 评论 -
DirectX 11 学习笔记-Part2-1【Instancing】
Instancing实例化(Instancing)的意思是指,在场景中多次绘制同一个物体,但是可以有不同的位置,方向,缩放,材质和贴图等。我们在绘制相同几何体时,通常不会直接使用每个几何体的世界坐标顶点和索引来绘制,而是使用同一份顶点和索引数据,然后根据不同物体的不同世界坐标,将本地坐标变换成世界坐标再进行绘制。这种做法虽然减少了重复的存储,但每次绘制时依然需要为每个物体设置一个不同的世界...原创 2019-01-25 22:10:43 · 1370 阅读 · 1 评论 -
DirectX 11 学习笔记-Part2-0
第二部分对应书本的Part 3。这部分起主要是DirectX的几种常见的应用场景。因此实际上理论知识的部分将减少,更多关注算法和实现的部分。因此笔记将结合实际的Demo代码来完成。接下来的几篇文章中,每篇文章都将围绕一个或多个topic,根据书本和提供源码实习一个Demo,结合代码和书本来讲解相关的知识。代码的地址依然是https://github.com/ZealotAlie/D...原创 2018-09-15 13:19:31 · 248 阅读 · 0 评论 -
DirectX 11 学习笔记-Demo-04
高斯模糊与Compute Shader模糊是游戏中常见的一种效果。模糊算法的一般做法是,对某一点的像素,将它与它周围的m*n个像素按照一定的权值累加起来,作为该点的新的像素值。 高斯模糊是指权值根据高斯方程来确定的模糊算法。假设我们选择做一个1*5的高斯模糊计算,定义0为目标像素,则共有-2,-1,0,1,2五个像素点,它们的系数G(x)可以由以下的方程确定 Demo中实现...原创 2018-09-15 12:28:41 · 277 阅读 · 0 评论 -
DirectX 11 学习笔记-Demo-03
TreeObject 主要包括了三个方面的内容,几何着色器,纹理数组和clip。 绘制树木的顶点只包含树木的位置和尺寸信息,我们需要将这部分信息传送到几何着色器中并转化为我们需要的屏幕坐标系顶点信息。 几何着色器中主要是通过视线的方向确定树的right方向,因为这里的树是一个类似billboard的纹理贴图,所以只需要用 float3 right = cross(up, look...原创 2018-09-08 15:35:13 · 302 阅读 · 0 评论 -
DirectX 11 学习笔记-Demo-02
Basic.fx 基本的Effect文件,包括一个顶点着色器,一个像素着色器和若干Cbuffer。Cbuffer按照更新频率分组有助于提高效率。这里有两组Cbuffer,第一组主要是环境相关参数,一般而言每帧只更新一次。 第二组是和具体绘制对象有关系的参数,包括世界坐标下的对象的矩阵信息,纹理变换矩阵和光照材质等。 cbuffer cbPerFrame { Direc...原创 2018-09-08 15:14:39 · 241 阅读 · 0 评论 -
DirectX 11 学习笔记-Demo-01
前言 这个Demo包含了《Introduction to 3D Game Programming with Directx 11》前12章的内容,我将它们都整合到同一个Demo中。学习的过程中还是建议循序渐进,按照书本的介绍进行练习。 另外,我不会详细介绍代码的每一部分,所以如果希望学习相关内容,可以结合书本阅读源码。 Demo源码可以在GitHub上获取 https://github...原创 2018-09-08 15:05:37 · 626 阅读 · 0 评论 -
DirectX 11 学习笔记-07【Computer Shader】
Computer Shader 使用GPU进行非图形应用被称为general purpose GPU (GPGPU) programming。并非所有的算法都适用于GPU计算,由于GPU的高并行构架,我们需要大量的数据元素使用相似操作并能对它们进行并行操作,向对像素片段着色器所做的那样。粒子系统也可以作为GPU计算的粒子,当粒子之间可以独立计算时,使用GPU进行并行计算。 对GPGPU编程...原创 2018-09-01 19:08:38 · 998 阅读 · 0 评论 -
DirectX 11 学习笔记-06【几何着色器】
几何着色器 几何着色器以完整的图元作为输入数据。例如绘制三角形列表时,几何着色器处理的是列表中的每个三角形。顶点着色器无法创建或销毁顶点,而几何着色器可以创建销毁几何体。在离开几何着色器之前,顶点坐标必须变换到齐次裁剪空间。 几何着色器编程与顶点/像素着色器相似,一般格式如下 [maxvertexcount(N)] void ShaderName ( PrimitiveTyp...原创 2018-09-01 19:04:28 · 371 阅读 · 0 评论 -
DirectX 11 学习笔记-05【深度模板】
深度缓冲区 深度缓冲区(depth buffer)是一个不包含图像数据的纹理对象。常见的深度值范围在0.0 到1.0 之间,0.0表示离观察者最近的物体,1.0表示离观察者最远的物体。深度缓冲区中每个元素都与后台缓冲区中的每个元素一一对应。深度缓冲区主要用于判断物体的哪些像素位于其他物体之前,从而不用关心绘制物体的先后顺序。 渲染时,当发现某个像素具有更小的深度值时,就更新该像素以及它在深...原创 2018-09-01 19:02:49 · 553 阅读 · 0 评论 -
DirectX 11 学习笔记-04【纹理】
纹理 纹理数据通常是存储在磁盘上的图像文件,我们需要将它读取出来,并载入到一个资源对象中。为纹理创建一个着色器资源视图可以将视图绑定到管线上,但需要注意设置BindFlags以指定需要绑定的管线阶段。 纹理坐标 过滤器 纹理中的元素是连续图像的一系列离散采样,纹理坐标(u,v)不能总是和纹理元素点一一对应,所以对纹理进行采样时,需要使用filter来读取一个或多个纹理元素并将它...原创 2018-09-01 19:01:09 · 382 阅读 · 0 评论 -
DirectX 11 学习笔记-03【管线概述】
渲染管线概述 之前已经讲了输入装配阶段(IA),暂时不考虑曲面细分(Tessellator Stage)和几何着色器,则可以简化为 IA->VS->RS->PS->OM 顶点着色器 着色器由HLSL写成。 顶点着色器的主要工作是坐标变换。 一般空间坐标的变换顺序为Local->World->View->Projection,当没有几...原创 2018-09-01 17:41:59 · 640 阅读 · 0 评论 -
DirectX 11 学习笔记-02【输入装配/图元拓扑/缓冲区与资源】
目录 输入装配阶段 图元拓扑创建缓冲区资源间的拷贝与性能问题注参考输入装配阶段 程序生成的场景数据,本质上是一系列的几何图元。我们需要以一定的方式将这些图元绑定到图形管线中,并经过一系列的阶段,最终显示在屏幕内。渲染管线的第一阶段是输入装配阶段,这一阶段从内存中读取几何数据并将这些数据组合为几何图元。 顶点作为一个基本的图元,三个顶点可以组成一个三角形,两个...原创 2018-09-01 17:19:49 · 1088 阅读 · 0 评论 -
DirectX 11 学习笔记-Part2-5【Cubemap/贴图置换/阴影/屏幕空间环境光遮蔽】【代码篇】
代码已上传至GitHub,这部分对应的项目为NormalDisplacementSsao。运行项目时可以使用数字键1-3切换渲染的shader,另外按下z键可以看到SSAO生成的遮罩贴图。这篇文章主要结合代码介绍渲染的流程(对应代码中的NDSsaoApp::DrawScene)。Shadow Map首先我们要渲染阴影深度图,看ShadowMap的定义class ShadowMap...原创 2019-01-27 23:35:40 · 932 阅读 · 0 评论