Directx11
程序员菜鸟
talk is cheap show me the code
展开
-
Directx 11 Begin Drawing
今天了解了渲染管线流程1. Input Assembler (IA) Stage2. Vertex Shader (VS) Stage3. Hull Shader (HS) Stage4. Tesselator Shader (TS) Stage5. Domain Shader (DS) Stage6. Geometry Shader (GS) Stage7. Stream Output (SO)...原创 2018-02-26 17:56:20 · 270 阅读 · 0 评论 -
【DirectX11】【学习笔记(5)】深度缓冲
【Overview】深度缓冲就是当同一个位置的Render target上有两个像素片段上时,由OM阶段来检查哪一个像素片段最终被渲染到屏幕上。全局变量声明ID3D11DepthStencilView* depthStencilView;ID3D11Texture2D* depthStencilBuffer;一个是深度模板对象,一个是深度模板缓存。Depth/Stencil B...原创 2018-11-23 15:46:54 · 526 阅读 · 0 评论 -
【DirectX11】【学习笔记(7)】变换
这一节我们学习如何用矩阵变换,对场景中的物体进行实时的变换。DirectX中的变换,我们用xna数学库里的XMMATRIX类型。缩放矩阵XNA已经提供了构建相应矩阵的函数XMMATRIX XMMatrixScaling( FLOAT ScaleX, // x=axis scale FLOAT ScaleY, // y-axis scale ...原创 2018-12-02 21:30:25 · 1234 阅读 · 3 评论 -
【DirectX11】【学习笔记(10)】混合
今天我们学习一下如何给图元增加一点混合效果,这样看起来会更透明。混合等式D3D中的混合效果和把render target上的像素与在它之前的透明图元用混合等式执行像素融合(FC) - Final Color(SP) - Source Pixel(DP) - Destination Pixel(SBF) - Source Blend Factor(DBF) - Destinat...原创 2018-12-04 11:08:40 · 540 阅读 · 0 评论 -
【DirectX11】【学习笔记(8)】渲染状态
上一节学完感觉还是有点不过瘾,我们这一节看看还能做出什么更厉害的效果呢?对于D3D来说,如果我们不去更改绑定缓冲,渲染状态,它将一直维持在原来的状态,比如上一节提到的绘制两个正方体时,我们就需要更新变换矩阵。我们能修改的渲染状态有以下三个:ID3D11RasterizerState - 这个接口是用来修改光栅化阶段的ID3D11BlendState - 这个是用来做OM阶段的色彩融...原创 2018-12-02 21:30:36 · 1134 阅读 · 2 评论 -
【DirectX11】【学习笔记(6)】世界和局部坐标系
介绍:世界中的不同空间有以下几个:世界坐标,视角坐标,局部坐标,屏幕坐标。我们可以使用这些效果来创建一个空间中的摄像机。为了使用这些空间,我们要把他们放在一个常量缓冲里,然后把缓冲传入VX(Vertex Shader)用来改变物体的顶点坐标。Local Space局部坐标是一个物体的坐标,当我们创建一个物体的时候,这个物体就在坐标的中心。这样的话,更容易定义顶点。如果要创建一片...原创 2018-11-30 22:04:43 · 740 阅读 · 0 评论 -
【DirectX11】【学习笔记(6)练习】世界和局部坐标系
本节内容主要学习了如何把代码中的变量传到vertex shader中去。通过这个来设置一个静态的摄像机。但是自己写代码下来,还是对其中的一些细节产生了疑问。比如说:1.Effect File中的缓冲区和代码中缓冲区(或者结构体)名称是否保持一致?A:不必保持一致,只需要结构体中的内容保持一致就而可以。2.如果要设置多个变量个多个EffectFile中的缓冲区怎么办?A:注意代码...原创 2018-12-01 14:53:29 · 693 阅读 · 0 评论 -
【DirectX11】【学习笔记(11)续】显示文本(代码实现)
一些补充:Adapter翻译成适配器更贴切An adapter is an abstraction of the hardware and the software capability of your computer. There are generally many adapters on your machine. Some devices are implemented in h...原创 2018-12-08 14:33:32 · 1953 阅读 · 1 评论 -
【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 · 1738 阅读 · 1 评论 -
【DirectX11】【学习笔记(9)练习】纹理贴图
上一节对我们所绘制的物体设置了纹理,但主要对其中一个函数有些疑问:ID3D11DeviceContext :: PSSetShaderResource()当我们对一个物体想设置多个纹理,或者想同时传入两个纹理进行混合时该怎么办?第一种方法:针对上面这个函数,第一个参数是穿入shader的槽。我们在effect file中写的texture变量后面可以加寄存器(槽),如下T...原创 2018-12-03 19:31:29 · 455 阅读 · 0 评论 -
【DirectX11】【学习笔记(11)】显示文本
之前我们已经学过关于DirectX11的各种简单效果了,包括RSstate,transform,OMdepthandstencil,texture,blendstate(凭记忆写的,不分前后接下来我们要学习如何在DirectX11里显示字。(毕竟一个没有字的游戏不算是游戏——小明)前方高能(本节课程可能很冗长,也很无聊)Font Rendering in Direct3D 11 (Us...原创 2018-12-06 20:20:40 · 3336 阅读 · 0 评论 -
【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 · 879 阅读 · 0 评论 -
【图形学】 shader中法线的变换矩阵
转载自https://www.cnblogs.com/freebird92/p/3656375.html一、法线和顶点坐标的区别顶点坐标<x,y,z>表示缺省的<x,y,z,1>,而法线向量的<x,y,z>表示缺省的<x,y,z,0>。法线向量只能保证方向的一致性,而不能保证位置的一致性。下面我们通过一个例子来看看问题所在。...转载 2018-12-20 21:37:37 · 369 阅读 · 0 评论 -
【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 · 524 阅读 · 1 评论 -
【DirectX11】【学习笔记(14)】点光源
好久没有更新博客了。。。 最近一直在忙一些其他的事情= =。。 DX都快忘了今天继续更新! 上次说到简单光照,今天我们就学习一个点光源影响点光源的因素主要有:范围,位置,衰减其中衰减用一个二次方程来表达Attenuation = att0 + (att1 * d) + (att2 * d²) att0 - 常量修饰符由于此值未乘以任何值,因此称为“常量...原创 2018-12-30 11:47:10 · 451 阅读 · 0 评论 -
【DirectX11】【学习笔记(4)练习】顶点索引
这一节的内容我感觉还是比较容易理解的。本节做两个练习Exercise 1创建两个顶点索引缓冲 ,用一个顶点缓冲。分别用两个顶点索引缓冲绘制两个不同的三角形。构成一个四边形。step1首先我们仿照之前的索引缓冲 创建一个新的缓冲 Indexbuffer2当前顶点缓冲中有6个顶点(为了展示DrawIndex第二个参数的调用),我们第一个索引缓冲为0 1 2,第二个为也是0...原创 2018-11-23 15:30:06 · 357 阅读 · 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 评论 -
Directx 11 Index Buffer
使用步骤:Step1: 创建一个DWORD类型的数组,用来保存索引数据Step2: 填充D3D11_BUFFER_DESC 要注意的是DESC中的ByteWidth是DWORD*2*3 因为example中是正方形(包含两个三角形,每个三角形三个顶点)Step3:D3D11_SUBRESOURCE_DATA 把第二步的描述信息填入数据中,创建缓存,设置索引缓存(设...原创 2018-02-27 11:45:26 · 461 阅读 · 0 评论 -
Directx 11 Depth view
深度视图是用来区别不同深度的渲染目标哪一个应该被绘制到屏幕上使用步骤:Step1:全局变量声明ID3D11DepthStencilView *ID3D11Texture2D(用作深度缓存区)Step2:填充深度缓存区的描述信息。其中比较重要的是depthStencilDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL;这个制定了将缓存区绑定到绘制流程中的O...原创 2018-03-03 16:05:33 · 411 阅读 · 0 评论 -
Directx 11初始化
step1: 初始化全局变量:交换链,设备,上下文(用于渲染),渲染目标视角step2:调用bool InitializeDirect3dApp(HINSTANCE hInstance) 1)这个函数填充了DXGI_MODE_DESC结构,和DXGI_SWAP_CHAIN_DESC结构 2) 接着创建设备和交换链,(利用刚刚填充好的描述信息) 3)在创建一个后台缓存(用来创建ren...原创 2018-02-24 20:21:55 · 444 阅读 · 0 评论 -
存疑的函数(关于设置视角)
1:VSSetConstantBuffers(是不是用来设置效果文件中的缓存区)2:SwapChain->GetBuffer有什么用?原创 2018-03-03 21:47:19 · 236 阅读 · 0 评论 -
Directx 11 Transformations
主要是三种坐标变换(在世界坐标系内的)1:旋转 通过函数XMMatrixRotationX/Y/Z/Axis2:放大/缩小通过函数XMMATRIX XMMatrixScaling3:平移XMMATRIX XMMatrixTranslation( FLOAT OffsetX, // Units translated on the x-axis FLOAT...原创 2018-03-04 16:16:56 · 206 阅读 · 0 评论 -
【杂记】Directx11 Font
DX11写字体用三种方法,GDI,D2D,Directx write 这里介绍D2D 因为DX11是不能使用D2D的(这里我也不知道为什么)但我们可以通过一个sharing surface 的概念,先用DX10.1来使用D2D,把渲染目标分享,再用DX11来渲染Step1:先通过IDXGIFactory1 接口来设置一个容器创建10.1设备和11的设备创建贴图,必须是BG...翻译 2018-04-22 16:24:58 · 945 阅读 · 0 评论 -
【DirectX11】【学习笔记(1)】初始化DirectX11
首先要涉及到的是Directx11环境的配置以及基础Win32程序框架的编写,这一部分和DirectX9.0是类似的。这里就不再赘述,写完DirectX11后会再开一个DirectX9专栏,记录上述部分。这里先预留。不过相关代码本节内容都会贴出来,所以没有看到以上两步的朋友也没有关系。接下来就直接进入主题:对DirectX11对象初始化。首先是本次笔记思维导图一.创建全局对象首...原创 2018-11-15 14:27:07 · 2479 阅读 · 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 · 599 阅读 · 0 评论 -
【杂记】DirectX-渲染到纹理(离屏渲染)
转载自 http://www.cnblogs.com/graphics/DirectX-渲染到纹理什么是纹理熟悉DX的兄弟们都知道什么叫纹理了,这里简单介绍一下,先看看现实生活中的例子吧,其实纹理的例子比比皆是,比如地板,墙面都是纹理。在图形学中,纹理主要是为了增强场景的真实感,如果你想绘制一个地面,简单一点可以直接使用一个矩形,稍微复杂一点可以用三角形网格,再复杂一点可以使用地面纹理...转载 2018-10-19 17:10:29 · 2325 阅读 · 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 · 1191 阅读 · 0 评论 -
【DirectX11】【学习笔记(2)练习】开始画图
针对本节学习内容三个练习:1.画一个正方形步骤:更改顶点数组中的点的坐标,同时把顶点缓存描述信息大小改为6.最终在Draw函数中,第一个参数设置为6.就可以了。注意:Direct3D画图,三角形顶点顺序为顺时针。2.更改图元只需要在IA阶段更改topology参数为其他的参数。3.更改图元颜色。更改PS函数中 return的向量数值即可。 ...原创 2018-11-16 18:43:51 · 332 阅读 · 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 · 778 阅读 · 0 评论 -
【DirectX11】【学习笔记(15)】第一人称摄像机
首先是一些相关的全局变量的声明。XMVECTOR DefaultForward = XMVectorSet(0.0f,0.0f,1.0f, 0.0f);XMVECTOR DefaultRight = XMVectorSet(1.0f,0.0f,0.0f, 0.0f);XMVECTOR camForward = XMVectorSet(0.0f,0.0f,1.0f, 0.0f);XMVE...原创 2018-12-31 14:21:58 · 654 阅读 · 0 评论