在C ++和DirectX中有趣的粒子效果的想法。请

时间:2011-08-31 16:23:27

标签: visual-c++ directx

我目前用自己的游戏引擎制作游戏,我用C ++编写,而且我使用的是最新的directx SDK。

游戏是一个自上而下的太空射击游戏(有一个非常有趣的转折),我希望有一种玩家将会飞过的星云效果。我真的想尝试并指出数以百计的粒子移动到玩家船的方式时的良好触觉感觉。有点像粒子会在XBLA上的Geomtry Wars中移出玩家的方式。

在C ++方面,我是一位经验丰富的程序员。但我不知道如何开始实现这种效果。有没有人有任何我可能想要研究的很酷的想法或设计选择?随意回答您想要的任何深度。

谢谢, 马特

1 个答案:

答案 0 :(得分:1)

你可以做这样的事来表示粒子,

struct Particle
{
      D3DXVECTOR3 position;
      float angle;
};

然后只需从速度更新x和y坐标(或者如果你的船在那个平面上移动则为x和z)并用一些基本公式而不是物理公式来计算新高度。具有“罪恶”和“时间”的东西,所以它不会离船移动的飞机太远。您可以将它们全部放在动态顶点着色器中,并在一次调用中将它们全部渲染。

对于directx 9,你有“点精灵” http://msdn.microsoft.com/en-us/library/bb147281%28v=vs.85%29.aspx

我认为对于较新的版本,你必须在着色器中完成这项工作,但我不确定。这个想法只是发送带有位置的点,可能只需要你需要的一些属性,并在着色器中构造一次粒子图像(最有可能是纹理的四边形)。

您可能会发现此链接很有用,至少可以获得一些想法。它虽然有点旧,但许多概念仍然适用: http://www.markmark.net/clouds/RTCRPubs.html

还有其他方法你甚至不需要修改缓冲区...你可以计算一个轨迹的点,给定一个起始位置和一个从开始起经过的时间,但那么它会更难实现船舶运动造成的力量效应。因此,您必须找到最适合您需求的方法。

编辑:对不起,我打算为单次调用说一个“动态顶点缓冲区”