xna杂记.doc
上传人:sy****28 上传时间:2024-09-13 格式:DOC 页数:30 大小:1.4MB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

免费试读已结束,剩余 20 页请下载文档后查看

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

粒子系统Particle示例本示例介绍了粒子系统的原理,展示了如何SpriteBatch使用粒子效果,包含两个粒子效果:爆炸和烟雾。原文地址:HYPERLINK"http://creators.xna.com/en-US/sample/particle"http://creators.xna.com/en-US/sample/particle。示例概览粒子系统(Particlesystems)通常用来绘制流体,在游戏中通常用于烟雾、火焰、火花和水花。例如,在Spacewar游戏中的爆炸效果就是一个粒子系统。粒子系统是由一定数量的小粒子构成的。每个粒子都有自己的物理性质,通常包含位置、速度和加速度。更复杂的粒子包含更多的物理属性。粒子的创建和初始化是由粒子系统决定的,但一旦开始了一个粒子效果,粒子的行为就是独立的了。粒子通常用2Dalpha混合的sprites进行绘制。大量的独立更新的粒子一个在另一个之上被绘制,粒子系统就表现出一种混沌或自然的外观。这个示例的粒子系统以Spacewar游戏的粒子系统为基础。但是,它还介绍了如何进行预先设置以避免垃圾回收。而且,本示例的粒子系统从DrawableGameComponent继承,而不是像Spacewar游戏中那样从SceneItem继承,这样我们可以很容易地将粒子系统插入到游戏中去。最小Shader配置VertexShaderModel1.1PixelShaderModel1.1示例控制本示例使用以下键盘和手柄控制动作键盘控制手柄控制切换粒子特效空格键A退出ESC或ALT+F4BACK工作原理ParticleSampleGame类是示例的主类。它展示了两种粒子特效:爆炸和上升的烟雾。爆炸特效使用了两个独立的粒子系统:一个系统绘制火焰,一个系统绘制烟雾。要使用这些特效,ParticleSampleGame创建了三个粒子系统:ExplosionParticleSystem,ExplosionSmokeParticleSystem和SmokePlumeParticleSystem。ParticleSampleGame类有一个state对应现在显示的特效,并拥有一个计时器用于处理何时开始一个新特效。本示例中最关键的类是ParticleSystem,它是一个抽象类,包含粒子系统的核心功能。调用ParticleSystem的AddParticles方法可以添加一个新的粒子效果。AddParticles使用几个常数初始化粒子。这些常数都应该被子类设置,让每个粒子系统都有不同的表现。子类可以重写ParticleSystem中的虚拟方法,这样就能更加灵活地控制粒子的创建。要注意的一个关键点是所有粒子都是在程序开始时分配的,然后就可以根据需要重用,在运行时无需重新实例化。这样可以避免在运行期间的垃圾回收。但是,这会带来一个问题:有可能在调用AddParticles方法时,所有粒子仍在使用中。在这种情况中,AddParticles会添加尽量多的粒子,然后停止添加,这会导致一个期望的特效可能不会被显示。解决方法是在ParticleSystem构造函数中添加一个参数,这个整数类型的参数指定需要的最大特效数量,这样使用粒子系统的开发者就可以指定特效的最小数量获取最好的效果。源代码HYPERLINK"http://shiba.hpe.sh.cn/jiaoyanzu/wuli/soft/xnaCreate/ParticleSample.rar"ParticleSample.rar下载(注释已翻译成简体中文)。阴影映射(ShadowMapping)示例这个示例展示了如何从一个单向光源实现一个基本的阴影映射,而阴影贴图的视场和投影可以匹配相机的视锥体。你可以使用这个示例让一个大场景中的多个动态对象投下动态阴影。原文地址:HYPERLINK"http://creators.xna.com/en-US/sample/shadowmapping1"http://creators.xna.com/en-US/sample/shadowmapping1。什么是阴影映射(ShadowMapping)?阴影映射是指一种产生阴影的技术,你可以将对象离开光源的距离存储在一张纹理中。当绘制场景时,你可以使用这个离开光源的距离判断要绘制的像素是否在存储在阴影贴图中的值之后。阴影映射技术需要绘制场景两次。第一次从光源视场中绘制可以产生阴影的所有对象,这些对象叫做遮蔽体(occluders)。这意味着你需要创建一个位于场景光源位置和光源方向的视矩阵和投影矩阵。对象的深度信息存储在一个渲染目标中。渲染目标通常使用的格式是一个32位浮点类型的SurfaceFormat.Single,它可