11 2011 档案
DX11_基于GPU_GeometryShader的3D精确拾取
摘要:拾取是图形学里一个很常用的应用,在3D世界里选中我们想要的东西,枪战游戏中判断子弹是否射中敌人。 这里我们讲下如何实现一个精确的拾取碰撞,不仅检测是否射中了这个物体,更进一步的返回射中了这个物体的上哪个三角形。在《COD》等比较优秀的枪战游戏中,我们都可以看到子弹是射中敌人身体的不同部位,敌人的身体会做出不同的反应。 然后我们看看如何实现一个基于GPU的拾取,把拾取的所有计算都映射到GPU上去。这里我们分别用GeometryShader和ComputeShader来做一个实现。这一篇先用GeometryShader来实现。程序主要是如果点击鼠标,选中了哪个三角形,就绘制它,其它三角形就以线框. 阅读全文
posted @ 2011-11-28 21:49 Bester 阅读(512) 评论(0) 推荐(0)
Directx11基于GPU_GeometryShader的粒子系统
摘要:粒子系统作为在游戏中一个挺常见的技术,用在各种爆炸,下雨,火焰等特效中。我们利用GPU中的GeomtryShader来实现一个粒子系统。以下雨特效为例。 介绍粒子系统具体实现前先介绍下GeomtryShader的StreamOutput这个特性。StreamOutput这个Stage把GeometryShader的计算结果输出到一个buffer中。 下面主要从Shader代码设计的角度讲下如何实现一个下雨特效的粒子系统,其核心算法说白了就一句话:分成主粒子和副粒子。主粒子按时间间隔分裂副粒子,副粒子到了一定的时间就死亡。 绘制时要么用公告板绘制一个粒子,要么用一条直线绘制一个粒子。 只是具.. 阅读全文
posted @ 2011-11-23 11:10 Bester 阅读(604) 评论(0) 推荐(0)
如何在GPU上产生随机数
摘要:随机数在CPU中可以有rand()这类函数,但是GPU中却没有。如果想直接在GPU中使用随机数?有一个折中的方法,先再CPU中产生一个随机数数组,然后写入一个texture1D中。最后再利用GPU来提取。 下面来看看具体代码: 先看Directx的部分。1:主要在Directx中生成并初始化一个存储了随机数的纹理ID3D11Texture1Dm_pRanTex和它的“指针”ID3D11ShaderResourceViewm_pRanTexRV。HRESULTParticleSystem::BuildRandomTex(){HRESULThr=S_OK;D3DXVECTOR4randomVal. 阅读全文
posted @ 2011-11-22 20:55 Bester 阅读(1009) 评论(0) 推荐(0)
Directx11:基于GPU_GeometryShader的Billboard公告板绘制
摘要:公告板是游戏里一很常见的技术,用来绘制树木,草地,爆炸效果等。说白了就求一个矩形框,然后贴一张照片上去。(Ps下由于个人博客所以讲的比较随便,有时候讲billboard,有时候公告板,有时候一个矩形框,都指差不多一个东西) 而GeometryShader则是Directx10里面推出的一个新的Shader能够处理完整的几何模型。想典型VertexShader只知道并处理顶点,而GeometryShader知道顶点,直线和三角形并处理它们。 这里用个Demo阐述下如何用GeomtryShader在GPU中绘制Billboard公告板。 1先讲下求公告板的算法。说白了就是求它的世界坐标系。 假设. 阅读全文
posted @ 2011-11-22 14:42 Bester 阅读(330) 评论(0) 推荐(0)