我正在尝试修改以下粒子系统。
http://create.msdn.com/en-US/education/catalog/sample/particle_3d
当我按下空格键时,所有的粒子位置和速度都被设置为0的函数。
然而,当我按下空格键时,粒子仍在移动。如果我转到FireParticleSystem.cs,可以将settings.Gravity设置为0,粒子停止移动,但粒子仍未被移动到(0,0,0)。
据我所知,问题在于GPU正在处理所有粒子位置,并根据它们的初始位置、初始速度和年龄乘以它们应该在哪里计算。因此,我所能做的就是改变粒子的初始位置和速度,但由于GPU正在处理一切,我无法即时进行更改。
我希望CPU能够单独计算粒子的位置。这是因为我将稍后实现某种风来推动粒子。如何阻止GPU接管?我认为这与VertexBuffers和绘制函数有关,但我不知道如何修改它使其正常工作。
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和绘制函数有关,但我不知道如何修改它使其正常工作。