D3d11
文章平均质量分 75
batilei
Temporal - Spatial Data
展开
-
Directx11 HelloWorld之与Directx9的比较
这些天终于受不了诱惑,决定入手Directx11。看个HelloWord的程序。 先看看整体框架:所有函数的声明。可以看到和D3d9c差不多,都是初始化窗口,创建设备,清理设备,消息循环和渲染。下面我们将看到发生变化的主要是创建设备的InitDevice()函数,其他都是些MFC框架。 HRESULT InitWindow( HINSTANCE hInstance, int nCmdShow ); HRESULT InitDevice(); void CleanupDevice(); LRESU原创 2010-12-07 01:50:00 · 3724 阅读 · 1 评论 -
记录下Directx11中几个易错点_C++和HLSL的变量绑定
最近遇到几个Directx11的bug,有些最后弄懂了,有些没有,记录下避免下次再犯错。 一个bug是在Directx11推荐用的数学库xnamath,里面的XMCOLOR居然无法和HLSL里面的float4绑定,如果你要用颜色的变量和HLSL的float4绑定,必须得原创 2011-08-18 19:34:31 · 2976 阅读 · 2 评论 -
Directx11 HelloWorld之HLSL的Effect框架的使用
最近尝试用了下Directx下的Effect框架,作为一初学者初学者,说下为什么我们要使用Effect框架及其好处吧。 首先Effect最大好处的就是简单,使得编写Shader绘制的程序工作量大大下降。如果不用Effect框架,那么一个个Vertex Shader,Geometry Shader和Pixel Shader都要一遍遍的先用D3DX11CompileFromFile得到二进制原创 2011-08-13 11:10:48 · 4241 阅读 · 0 评论 -
Directx11:基于GPU_GeometryShader的Billboard公告板绘制
公告板是游戏里一很常见的技术,用来绘制树木,草地,爆炸效果等。说白了就求一个矩形框,然后贴一张照片上去。(Ps下由于个人博客所以讲的比较随便,有时候讲billboard,有时候公告板,有时候一个矩形框,都指差不多一个东西) 而Geometry Shader则是Directx10里面推出的一个新的Shader能够处理完整的几何模型。想典型VertexShader只知道并处理顶点,而Geom原创 2011-11-22 14:42:59 · 2776 阅读 · 0 评论 -
Directx11_使用Effect框架包装ComputeShader
很多人使用Effect框架基本针对渲染功能,典型如:technique11 meshTech{pass p0{SetVertexShader(CompileShader( vs_4_0,VS_DRAW() ) );SetGeometryShader(NULL);SetPixelShader(CompileShader( ps_4_0,PS_DRAW() ) );Se原创 2011-12-12 15:19:22 · 1686 阅读 · 0 评论 -
基于GPU并行的矩阵转置优化
最近在做基于GPU的并行BitonicSort排序,中间用到了矩阵转置。觉得矩阵转置虽然简单,但一个好的矩阵转置优化却很好表达了GPU程序优化的几个基本要素。所以记录下。这里GPU接口还是用Directx11的DirectCompute,然后为了便于着重算法重点,这里我们只讨论HLSL的代码。 最简单的GPU矩阵转置大家应该可以想到了,就是把X和Y做一个对换。//Matrix Tra原创 2011-12-12 10:57:40 · 5029 阅读 · 0 评论 -
Directx11 HelloWorld之_一个简洁漂亮的框架
前些天在看微软的一个HandsOnLab和《Intro to D3d10》的时候,发现一个挺好的设计框架,简洁优美,很方便初学者搭建自己一些简单的绘制程序,修改下后拿来分享下。 关键是Run()和里面的Setup()和MessageLoop()。class BasicDraw{public:HRESULT Run();BasicDraw();~BasicDraw();原创 2011-05-22 22:36:00 · 2396 阅读 · 4 评论 -
DX11_基于GPU_GeometryShader的3D精确拾取
拾取是图形学里一个很常用的应用,在3D世界里选中我们想要的东西,枪战游戏中判断子弹是否射中敌人。 这里我们讲下如何实现一个精确的拾取碰撞,不仅检测是否射中了这个物体,更进一步的返回射中了这个物体的上哪个三角形。在《COD》等比较优秀的枪战游戏中,我们都可以看到子弹是射中敌人身体的不同部位,敌人的身体会做出不同的反应。 然后我们看看如何实现一个基于GPU的拾取,把拾取的所有计算原创 2011-11-28 21:49:34 · 2304 阅读 · 0 评论 -
DX11_基于GPU_ComputeShader的3D精确拾取
这里使用ComputeShader做拾取,主要为了熟悉下ComputeShader,为自己后面一个项目做准备。拾取基本原理前面博客也讲了,都差不多,将射线从屏幕坐标系转换到物体局部坐标系,然后再判断三角形是否被射线射中。主要是代码的实施上不一样,这里我尝试并行地通过ComputeShader,由线程i来负责判断三角形i是否被选中。 HLSL的代码://==============原创 2011-12-21 18:28:13 · 2771 阅读 · 3 评论 -
Directx11基于GPU_GeometryShader的粒子系统
粒子系统作为在游戏中一个挺常见的技术,用在各种爆炸,下雨,火焰等特效中。我们利用GPU中的GeomtryShader来实现一个粒子系统。以下雨特效为例。 介绍粒子系统具体实现前先介绍下GeomtryShader的StreamOutput这个特性。StreamOutput这个Stage把GeometryShader的计算结果输出到一个buffer中。 下面主要从Shade原创 2011-11-23 11:10:04 · 2715 阅读 · 0 评论 -
HLSL中struct里面的变量在内存中的放置方式
《Intro to d3d10》里面关于hlsl的structure packing有这样一段描述struct Light{ Light() { ZeroMemory(this, sizeof(Light)); } D3DXVECTOR3 pos; float pad1; // not used原创 2011-09-02 21:59:57 · 2195 阅读 · 3 评论 -
Vs中高亮HLSL关键字
很多刚开始写HLSL,或者cg,glsl等shader语言的朋友一定会有个小困惑,编辑器不支持这些shader语言的关键字,在记事本中跟文本一样全是一个颜色的写,很容易犯错。下面以HLSL为例(其他类似)说下,如何使得vs能够识别并高亮这些shader的关键字。 主要有原创 2011-08-17 16:24:29 · 5851 阅读 · 1 评论 -
Directx11与PhysX的结合
最近因为一个比赛项目用了段时间的PhysX,来总结下如何在Directx11中使用PhysX吧。 首先是PhysX的部署。这个在PhysX SDK的第一页的Installation也有讲了。 1:在PhysX的SDK里面找到PhysXCore.dll, Phy原创 2011-08-13 16:09:55 · 2363 阅读 · 0 评论 -
用Pix调试HLSL
很多学Directx特别初学者最头痛应该是shader的调试问题了。一般的编译器包括vs都不支持shader的调试。还好微软出了个Pix,其功能相当强大,而不仅仅是debug。这里我们入门主要总结下其debug的功能。 Pix的调试原理和一般的调试很不一样,它是先把程序原创 2011-09-10 17:34:12 · 6127 阅读 · 4 评论 -
Directx11 HelloWorld之简单三角形绘制
学习Directx11进行简单的三角形绘制,以此熟悉Direct11的绘制流程。此文参考上一篇原创 2010-12-22 22:14:00 · 3590 阅读 · 1 评论 -
Directx11 HelloWorld之DirectCompute
前些天想根据DX11的SDk自己写一个最简单的Direct Compute,中间又病倒了,耽搁了这些天昨晚才调好,鉴于网上太少dx11的学习资料了,记录下。 首先要说的是我的改写版本主要是为了代码上的简明,去掉了很多硬件检测,以便迅速明白dx11的Direct Compute的架构,所以在很多人的机器上怕一时还运行不了,这个可以先明白基本架构后再进行向下兼容。 首先说下Directx11的存储读写模型。在Dx11的硬件中主要用buffer存储数据,device来进行计算,shader resourc原创 2011-01-29 10:29:00 · 3955 阅读 · 2 评论 -
Directx11中获取HLSL中变量一些问题
在Directx10和11中,如何将CPU初始化好的resource(主要以buffer为例)绑定到HLSL语言中buffer,是个让我曾经有点小小困惑的问题,这两天做了几个小小实验。整理下思路如下。 一般用CSSetShaderResources()绑定shader resource,如果在HLSL中的structured有指定register(比如StructuredBuffer testInBuffer:register(t0)),那么就根据CSSetShaderResources(UI原创 2011-03-18 16:09:00 · 4792 阅读 · 1 评论 -
Directx10,11的SwapChain,RenderTarget和DepthBuffer解释
在开始学Directx10,11时,有几个常见的概念,或变量如SwapChain,RenderTarget,Depth Buffer都有点似懂非懂,很多时候都是依样画葫芦。写的多了,加上看了SDK和《Intro to d3d10》后,最近突然焕然大悟。记录分享下。1:SwapChain。SwapChain这个概念还是比较容易懂的,主要负责维护几个表面(图像)的集合,当显示器在展示当前帧时,Directx在后台绘制下一帧。 怕讲的不够准确清晰,附《Intro to d3d10》的详细解释如下: T原创 2011-04-07 21:02:00 · 7022 阅读 · 5 评论 -
Directx11的warning:Resource View Is Already Bound To An OutputSlot
之前在博文里面说过不能同时将一个resource的shader resource view和unordered access view绑定到pipeline。本来想说这种sb行为估计也没人会犯错。但是今天才发现防不胜防,当系统一大起来,算法复杂起来,就会不经意的犯这种错误了。首先看看SDK对同时绑定两个view时(先用CSSetUnorderedAccessView绑定到output slot,再用CSSetShaderResourceView绑定到input slot)系统会做的反应的解释:ID3D11D原创 2011-04-13 21:09:00 · 1577 阅读 · 0 评论 -
基于GPU的3D流体模拟
最近在做一个基于GPU的3D流体模拟。API是Directx11,主要GPU并行计算也是在Directx11的DirectCompute上完成的。初步已经完成了流体的计算,所有的计算都映射到GPU上去。正在打算扩展到流体与固体的交互,能够轻易的整合到任何游戏场景中。先放几个截图。原创 2011-04-27 19:29:00 · 3919 阅读 · 10 评论 -
Directx11之Debug DirectCompute_将数据从GPU读到CPU
在Directx11中采用DirectCompute进行GPU并行的数值计算,或者Debug DirectCompute的程序,一个最典型的问题就是将GPU中的计算结果读出来到CPU让我们也可以看结果是否正确。 首先讲由于Directx11中用来存储结果的subresour原创 2011-03-18 16:36:00 · 3045 阅读 · 1 评论 -
directx10 11中读写gpu的resource方法补充总结
前面说过可以通过map函数来用cpu来读写gpu的计算数据。这几天又看了些文章后,感觉自己前面的理解有点肤浅。再来补充总结下。 首先如果想更新GPU中的resource,1是可以通过map()函数来让CPU读写GPU的数据;2还可以通过ID3D11DeviceConte原创 2011-04-07 11:43:00 · 3880 阅读 · 1 评论 -
D3d10和D3d11中Map()函数用法一点心得总结
Directx10和Directx11很多resource类都有个Map()函数,个人感觉它是一个蛮重要的CPU和GPU沟通桥梁。下面以ID3D11DeviceContext::Map()为例讲下。 ID3D11DeviceContext::Map官方解释是:ID3D11D原创 2011-02-13 11:12:00 · 5291 阅读 · 0 评论 -
如何在GPU上产生随机数
随机数在CPU中可以有rand()这类函数,但是GPU中却没有。如果想直接在GPU中使用随机数?有一个折中的方法,先再CPU中产生一个随机数数组,然后写入一个texture1D中。最后再利用GPU来提取。 下面来看看具体代码: 先看Directx的部分。 1:主要在Directx中生成并初始化一个存储了随机数的纹理ID3D11Texture1D m_pRanTex和它原创 2011-11-22 20:55:06 · 3032 阅读 · 0 评论