我正在尝试对以下粒子系统进行修改。 http://create.msdn.com/en-US/education/catalog/sample/particle_3d
我有一个功能,当我按下 Space 时,所有粒子的位置和速度都设置为 0。
for (int i = 0; i < particles.GetLength(0); i++)
{
particles[i].Position = Vector3.Zero;
particles[i].Velocity = Vector3.Zero;
}
但是,当我按空格键时,粒子仍在移动。如果我转到 FireParticleSystem.cs,我可以将 settings.Gravity 设置为 0,粒子停止移动,但粒子仍然没有移动到 (0,0,0)。
据我了解,问题在于 GPU 正在处理所有粒子位置,它根据粒子的初始位置、初始速度和乘以它们的年龄来计算粒子应该在哪里。因此,我所能做的就是改变粒子的初始位置和速度,但我无法即时完成,因为 GPU 正在处理所有事情。
我希望 CPU 单独计算粒子的位置。这是因为我稍后将实施某种风来推动粒子。如何阻止 GPU 接管?我认为这与 VertexBuffers 和 draw 函数有关,但我不知道如何修改它以使其工作。