DirectX12 龙书学习
rf_versace
这个作者很懒,什么都没留下…
展开
-
d3d12龙书学习之MiniEngine的最小化实现(一)
文章目录MiniEngine介绍项目目的前期准备龙书第四章的实现过程0. 创建win32窗口1. 创建ID3D12Device接口实例2. 创建ID3D12Fence对象,并查询描述符大小3. 检测4x MSAA的支持(这一步骤没有必要性)4. 创建命令队列、命令列表分配器和主命令列表5. 创建交换链6. 创建描述符堆7. 调整后台缓冲区大小,创建渲染目标视图8. 创建深度/模板缓冲区以及视图9....原创 2019-04-13 23:30:29 · 3237 阅读 · 4 评论 -
d3d12龙书学习之MiniEngine的最小化实现(十五) 龙书第19章 法线贴图 Normal Map
文章目录为什么要有法线贴图原理实施MiniEngine注意点为什么要有法线贴图先来看一张截图很容易发现,这个柱子的反光不对,一眼看过去就知道是一张贴图,非常的不真实。因为我们的柱子模型,本身就是平滑的。当然了可以通过雕刻,使得柱子模型完美的匹配对应的纹理。但工作量太大。于是就用到了法线贴图技术原理根据贴图纹理生成一张法线贴图这个法线贴图中每个像素记录的是该点的法向量在PS阶段...原创 2019-07-14 22:54:42 · 361 阅读 · 0 评论 -
d3d12龙书学习之MiniEngine的最小化实现(十四) 龙书第18章 skybox天空盒、动态天空盒
文章目录项目准备什么是天空盒静态天空盒实现镜面反射实现动态天空盒实现实现一个天空盒缓冲区总结总结项目准备因为天空盒用的是柱子那个场景。后续做裁剪时修复了摄像机的bug,把15和17章的代码整合在一起。这样保证我们新的项目中底层代码始终是最新的。项目准备后的效果图:什么是天空盒我们玩游戏,可以看到很远的景色。那这些很远的景色真的是真实绘制的吗?如果是的话,对于那么遥远的物体绘制,需要...原创 2019-07-07 21:54:26 · 604 阅读 · 0 评论 -
d3d12龙书学习之MiniEngine的最小化实现(十三) 龙书第17章 拾取
文章目录拾取是什么3D拾取的原理原先代码建议改造拾取代码解释debug模式下“跳帧”?最终效果拾取是什么我们玩游戏中,选中目标啊,鼠标按下按钮之类的。这些都属于图象拾取范畴。对于UI来说,因为是2D,很简单,只需要根据鼠标坐标来找出最上层的UI就可以了。对于3D空间来说,因为透视原理,就不能简单的根据鼠标坐标来判断了。3D拾取的原理根据鼠标所点的位置,生成一根射线,射线与3D空间中物...原创 2019-06-23 00:06:12 · 241 阅读 · 0 评论 -
d3d12龙书学习之MiniEngine的最小化实现(十二) 龙书第16章 实例化与视锥体裁剪
文章目录实例化通过实例化修改渲染流程视锥体裁剪修改MiniEngine中Frustum为左手坐标系通过一个常量缓冲区实现裁剪release帧率对比实例化实例化实际上就是通过一套顶点和索引,绘制多个物体。可以为物体设置不同的转换矩阵,纹理等所需属性。简单流程如下:缓冲区写入每个渲染目标的的矩阵参数缓冲区写入每个渲染目标的纹理属性以及纹理ID缓冲区写入所需的纹理那么通过实例化只需要...原创 2019-06-21 23:31:24 · 386 阅读 · 0 评论 -
d3d12龙书学习之MiniEngine的最小化实现(十一) 龙书第15章 第一人称摄像机 动态索引
文章目录第一人称摄像机动态索引MiniEngine中的InitAsDescriptorRange简单对比下采用动态索引和非动态索引的帧数变化第一人称摄像机我们原来的摄像机主要是通过鼠标来旋转、放大图象。旋转用的是比较符合观察的那种。本章呢要做这个第一人称视角的摄像机。实际上就是根据玩家的操作,来不断调整摄像机的位置以及朝向。整体来说没什么难度。在MiniEngine中有一个CameraC...原创 2019-06-16 18:53:14 · 310 阅读 · 0 评论 -
d3d12龙书学习之MiniEngine的最小化实现(九) 龙书第13章 计算着色器 模糊,描边
文章目录前言添加计算着色器相关的文件利用计算着色器计算输入向量的和numthreads的含义dispatch参数意义水波纹采用计算着色器计算模糊效果sobel描边计算着色器总结调试着色器目前为止,对于原MiniEngine代码的变化记录前言计算着色器是利用GPU来计算的一种着色器程序。本身不属于渲染管线。但因为是GPU编程中的一部分,所以可以读到显存中的各类数据。又因为GPU并发计算能力很强,...原创 2019-06-11 00:10:33 · 440 阅读 · 0 评论 -
d3d12龙书学习之MiniEngine的最小化实现(八) 龙书第12章 几何着色器 公告板
文章目录几何着色器简介公告板实现流程公告板几何着色器解释看下效果开启MSAA以及AlphaToCoverage之后的效果修改debug渲染效率过低的问题总结几何着色器简介可以看d3d12龙书第146页。对于本章内容来说,只有3个着色器。顶点着色器(VS)、几何着色器(GS)、像素着色器(PS)VS ==> GS ==> PSVS:拿到渲染目标的顶点,可以修改传入的顶点参数G...原创 2019-06-04 00:36:12 · 356 阅读 · 0 评论 -
d3d12龙书学习之MiniEngine的最小化实现(十) 龙书第14章 曲面细分阶段
文章目录前言常量外壳着色器控制点外壳着色器域着色器看下龙书的结果前言dx12的渲染流水线如下,基本上起一个流水线的输出等于下一个流水线的输入阶段名字可编程内容输入装配器阶段 IA输入顶点、索引、拓扑结构顶点着色器阶段 VS修改顶点数据,例如坐标转换(可选)外壳着色器阶段 HS常量外壳着色器:输出曲面细分因子(可选)外壳着色器阶段 HS控制点外壳着...原创 2019-06-14 22:53:05 · 249 阅读 · 0 评论 -
d3d12龙书学习之MiniEngine的最小化实现(七) 龙书第11章 模板缓冲
文章目录前言模板缓冲的意义修改camera坐标系camera生成的矩阵修改深度缓冲区默认值以及默认深度\模板检测函数的修改默认PSO采用的光栅化修改绘制基础图形(地板、墙、头骨)绘制镜中世界MiniEngine模板缓冲无效的bug绘制透明镜子绘制现实阴影双重混合?镜中阴影?前言本章的主要内容是通过模板缓冲来实现镜中世界。对于镜中世界的实现来说,还可以采用一个额外的摄像机来做,当然我也没有实际...原创 2019-06-02 00:20:59 · 378 阅读 · 0 评论 -
d3d12龙书学习之MiniEngine的最小化实现(六) 龙书第10章 混合
文章目录前言箱子采用带透明的纹理MiniEngine中非垂直同步的时间戳bug雾效果常量缓冲区16字节对齐的问题水体半透明效果习题5 禁止写入红绿通道总结前言首先我们先简单的优化下代码。在我们现在的项目中,shader运行总共需要4个常量缓冲区:槽位0:传入渲染目标特有的ObjectConstants结构,里面有模型转世界坐标矩阵、纹理转换矩阵、纹理偏移矩阵槽位1:传入通用的投影矩阵、...原创 2019-05-26 22:33:17 · 360 阅读 · 0 评论 -
d3d12龙书学习之MiniEngine的最小化实现(五) 龙书第9章 纹理贴图
文章目录工程结构优化MiniEngine的纹理操作类添加shapes所用的纹理添加水体所用的纹理总结工程结构优化在MiniEngine项目中,核心文件都放在Core文件夹下,显得文件很多,阅读起来可能不是很方便。这里稍微做一下整理。根据功能分好文件夹,对应VS中已经分好的文件夹。MiniEngine的纹理操作类在MiniEngine中提供了非常方便的纹理类,TextureManager。...原创 2019-05-25 22:45:09 · 387 阅读 · 0 评论 -
d3d12龙书学习之MiniEngine的最小化实现(四) 光照shader的实现
文章目录前言修改MiniEngine的坐标转换d3d12book的光照shader添加shapes对应的光照shader最终结果为什么结果比d3d12book的要亮前言光照的实现,主要是shader做的,C++代码层没添加多少东西。理解了shader,看懂d3d12book的源码,shader直接拷进来,C++代码直接转过来就可以了。难度主要是看懂shader。对于光照的计算,应该说我也没...原创 2019-05-21 23:21:32 · 385 阅读 · 0 评论 -
d3d12龙书学习之MiniEngine的最小化实现(三)
文章目录前言第七章的实现过程生成顶点、索引组建一个渲染结构体,用于渲染不同的物体shapes分物体渲染waves分物体渲染一些额外的修改结果图如下前言第七章一开始,讲了一个帧资源渲染的东西。主要以一就在于时CPU和GPU异步工作。根据龙书前面的学习也能知道,在d3d12中,CPU负责组建渲染指令、渲染数据。GPU读取上传缓冲区和命令队列来执行。CPU组建完当前帧内容后,对于GPU使用的内容...原创 2019-05-02 16:32:37 · 725 阅读 · 0 评论 -
d3d12龙书学习之MiniEngine的最小化实现(二)
文章目录前言龙书第六章的实现过程绘制流程简述上传缓冲区顶点数据、索引数据shader模块根签名渲染流水线先组装起来看看实际效果摄像机代码组装前言最近发现一个不错的讲d3d12的博客,看了很多文章,受益匪浅。https://blog.csdn.net/u014038143/article/category/7328933里面对d3d12中的很多概念解释的很清晰。龙书第六章的实现过程绘制流...原创 2019-04-27 21:20:00 · 719 阅读 · 0 评论 -
d3d12龙书学习之MiniEngine的最小化实现(十六) 龙书第20章 阴影贴图 Shadow Map
文章目录shadow map技术简介MiniEngine中的shadowBufferMiniEngine中的shadowCamera调试以及知其然而不知所以然的魔改过程柱子上没有影子?总结shadow map技术简介Shadow Map网上有大把的技术文档。简单说就是设置一个camera到需要产生阴影的光源位置,根据光源类型有不同的camera类型。使用这个camera观察世界,生成深度图...原创 2019-07-21 17:28:10 · 497 阅读 · 1 评论