DirectX11学习笔记及实例
虽然之前看过很多次DirectX9和11的笔记以及文档,并且把代码也跑过很多次,但是都不是很系统的记录学习。
故此特开一个专栏,记录每次系统学习的内容,并且针对该内容每次做一些自己的小demo。
看了浅墨大神的博客感觉很有必要自己做整理不然知识掌握太差。
程序员菜鸟
talk is cheap show me the code
展开
-
【DirectX11】【学习笔记(13)】简单光照
光照在游戏中的渲染是非常重要的。但是如何保证我们实时渲染光照的同时,还能把游戏帧率保持在30以上就很值得人思考了。Types of LightAmbient环境光,主要是用来保证环境中没有直接被光源照射的部分没有直接变黑。我们用一个分量乘法来实现环境光eg. LightAmbient(0.5, 0.5, 0.5) * MaterialDiffuse(0.75, 1.0, 0.5...原创 2018-12-10 18:17:28 · 523 阅读 · 1 评论 -
【DirectX11】【学习笔记(12)】FPS实现
这一节我们学习如何制作一个高分辨率的定时器。这个可以用来确保我们的物体在1秒内的距离是确定的,不管我们的游戏每秒有60帧还是6帧(因为我们之前世界矩阵的变换是基于每一帧的)Global Declarationsdouble countsPerSecond = 0.0;__int64 CounterStart = 0;int frameCount = 0;int fps = 0;...原创 2018-12-09 16:08:02 · 878 阅读 · 0 评论 -
【DirectX11】【学习笔记(11)】显示文本
之前我们已经学过关于DirectX11的各种简单效果了,包括RSstate,transform,OMdepthandstencil,texture,blendstate(凭记忆写的,不分前后接下来我们要学习如何在DirectX11里显示字。(毕竟一个没有字的游戏不算是游戏——小明)前方高能(本节课程可能很冗长,也很无聊)Font Rendering in Direct3D 11 (Us...原创 2018-12-06 20:20:40 · 3327 阅读 · 0 评论 -
【DirectX11】【学习笔记(9)练习】纹理贴图
上一节对我们所绘制的物体设置了纹理,但主要对其中一个函数有些疑问:ID3D11DeviceContext :: PSSetShaderResource()当我们对一个物体想设置多个纹理,或者想同时传入两个纹理进行混合时该怎么办?第一种方法:针对上面这个函数,第一个参数是穿入shader的槽。我们在effect file中写的texture变量后面可以加寄存器(槽),如下T...原创 2018-12-03 19:31:29 · 452 阅读 · 0 评论 -
【DirectX11】【学习笔记(9)】纹理贴图
最近在做UE4项目的时候,感觉自己对于贴图的部分理解还是不够,今天顺便复习一下。本节内容,我们要学习如何导入贴图,并且把贴图映射到我们的物体上。在DirectX3D中,我们使用UV坐标来映射贴图到物体。U是水平,V是垂直坐标。并且U,V都在0-1之间。所以当U,V都为1时,就是图像的结束位置。如果我们把U,V的坐标都改成2的时候,它会在物体上重复Global Declara...原创 2018-12-03 18:09:36 · 1733 阅读 · 1 评论 -
【DirectX11】【学习笔记(8)】渲染状态
上一节学完感觉还是有点不过瘾,我们这一节看看还能做出什么更厉害的效果呢?对于D3D来说,如果我们不去更改绑定缓冲,渲染状态,它将一直维持在原来的状态,比如上一节提到的绘制两个正方体时,我们就需要更新变换矩阵。我们能修改的渲染状态有以下三个:ID3D11RasterizerState - 这个接口是用来修改光栅化阶段的ID3D11BlendState - 这个是用来做OM阶段的色彩融...原创 2018-12-02 21:30:36 · 1133 阅读 · 2 评论 -
【DirectX11】【学习笔记(7)】变换
这一节我们学习如何用矩阵变换,对场景中的物体进行实时的变换。DirectX中的变换,我们用xna数学库里的XMMATRIX类型。缩放矩阵XNA已经提供了构建相应矩阵的函数XMMATRIX XMMatrixScaling( FLOAT ScaleX, // x=axis scale FLOAT ScaleY, // y-axis scale ...原创 2018-12-02 21:30:25 · 1233 阅读 · 3 评论 -
【DirectX11】【学习笔记(6)练习】世界和局部坐标系
本节内容主要学习了如何把代码中的变量传到vertex shader中去。通过这个来设置一个静态的摄像机。但是自己写代码下来,还是对其中的一些细节产生了疑问。比如说:1.Effect File中的缓冲区和代码中缓冲区(或者结构体)名称是否保持一致?A:不必保持一致,只需要结构体中的内容保持一致就而可以。2.如果要设置多个变量个多个EffectFile中的缓冲区怎么办?A:注意代码...原创 2018-12-01 14:53:29 · 693 阅读 · 0 评论 -
【DirectX11】【学习笔记(6)】世界和局部坐标系
介绍:世界中的不同空间有以下几个:世界坐标,视角坐标,局部坐标,屏幕坐标。我们可以使用这些效果来创建一个空间中的摄像机。为了使用这些空间,我们要把他们放在一个常量缓冲里,然后把缓冲传入VX(Vertex Shader)用来改变物体的顶点坐标。Local Space局部坐标是一个物体的坐标,当我们创建一个物体的时候,这个物体就在坐标的中心。这样的话,更容易定义顶点。如果要创建一片...原创 2018-11-30 22:04:43 · 739 阅读 · 0 评论 -
【DirectX11】【学习笔记(5)】深度缓冲
【Overview】深度缓冲就是当同一个位置的Render target上有两个像素片段上时,由OM阶段来检查哪一个像素片段最终被渲染到屏幕上。全局变量声明ID3D11DepthStencilView* depthStencilView;ID3D11Texture2D* depthStencilBuffer;一个是深度模板对象,一个是深度模板缓存。Depth/Stencil B...原创 2018-11-23 15:46:54 · 519 阅读 · 0 评论 -
【DirectX11】【学习笔记(4)练习】顶点索引
这一节的内容我感觉还是比较容易理解的。本节做两个练习Exercise 1创建两个顶点索引缓冲 ,用一个顶点缓冲。分别用两个顶点索引缓冲绘制两个不同的三角形。构成一个四边形。step1首先我们仿照之前的索引缓冲 创建一个新的缓冲 Indexbuffer2当前顶点缓冲中有6个顶点(为了展示DrawIndex第二个参数的调用),我们第一个索引缓冲为0 1 2,第二个为也是0...原创 2018-11-23 15:30:06 · 356 阅读 · 0 评论 -
【DirectX11】【学习笔记(4)】顶点索引
Overview:索引主要是用来定义如何画图元。eg:画一个正方形需要两个三角形,6个顶点。如果用了索引的画,只需要4个顶点,定义第一个三角形为顶点0,1,2 第二个三角形为顶点0,2,3全局变量声明:ID3D11Buffer* squareIndexBuffer;ID3D11Buffer* squareVertBuffer;顶点列表:Vertex v[] ={ ...原创 2018-11-21 15:31:50 · 774 阅读 · 0 评论 -
【DirectX11】【学习笔记(3)练习】修改三角形颜色
本节主要学习了如何通过利用输入布局,VS 和PS来给三角形上色。Exercise 1:画一个紫色三角形。步骤:更改vertex数组中的颜色值就可以做到。(紫色颜色值为0.5f,0.5f,0.5f)Exercise 2:向VS传入两个颜色,使得最终颜色值为两个颜色向量相乘。首先更改顶点结构和输入布局。struct Vertex{ Vertex() {} XMF...原创 2018-11-18 14:42:48 · 269 阅读 · 0 评论 -
【DirectX11】【学习笔记(3)】修改三角形颜色
本章内容主要是关于如何修改我们的着色器,顶点结构,包括输入布局(layout)赋值给每个顶点的颜色,最终会在整个三角形上进行插值。Effects File在fx文件中我们创建了顶点和像素着色器。 首先我们在文件里创建一个新的结构体,这个结构体是VS的返回类型,同时也是PS的输入类型。我们只需要在VS里把接收到的颜色,传递给下一个阶段。颜色在传到PS之前会先经过RS,在RS阶段...原创 2018-11-18 12:51:18 · 369 阅读 · 0 评论 -
【DirectX11】【学习笔记(2)练习】开始画图
针对本节学习内容三个练习:1.画一个正方形步骤:更改顶点数组中的点的坐标,同时把顶点缓存描述信息大小改为6.最终在Draw函数中,第一个参数设置为6.就可以了。注意:Direct3D画图,三角形顶点顺序为顺时针。2.更改图元只需要在IA阶段更改topology参数为其他的参数。3.更改图元颜色。更改PS函数中 return的向量数值即可。 ...原创 2018-11-16 18:43:51 · 332 阅读 · 0 评论 -
【DirectX11】【学习笔记(2)】开始画图
可编程渲染管线概述:渲染管线就是用来创建虚拟摄像机看到的2d图像的设置步骤。它包含以下几个阶段1. Input Assembler (IA) Stage 2. Vertex Shader (VS) Stage 3. Hull Shader (HS) Stage4. Tesselator Shader (TS) Stage 5. Domain Shader (DS) Stag...原创 2018-11-16 13:41:34 · 1185 阅读 · 0 评论 -
【DirectX11】【学习笔记(1)番外练习】初始化DirectX11
继续上一章提到的错误checkingHRESULT值:S_OK - 函数成功E_NOTIMPL - 函数没有执行E_NOINTERFACE - 接口不支持E_ABORT - 函数越界E_FAIL - 函数失败E_INVALIDARG - 一个或者多个参数无效DXGetErrorDescription(HRESULT hResult)函数可以返回更具体的错误由于这...原创 2018-11-15 16:10:52 · 597 阅读 · 0 评论 -
【DirectX11】【学习笔记(1)】初始化DirectX11
首先要涉及到的是Directx11环境的配置以及基础Win32程序框架的编写,这一部分和DirectX9.0是类似的。这里就不再赘述,写完DirectX11后会再开一个DirectX9专栏,记录上述部分。这里先预留。不过相关代码本节内容都会贴出来,所以没有看到以上两步的朋友也没有关系。接下来就直接进入主题:对DirectX11对象初始化。首先是本次笔记思维导图一.创建全局对象首...原创 2018-11-15 14:27:07 · 2469 阅读 · 0 评论