2

我必须用 C# 在粒子系统上编写程序,并且我正在使用 Visual Studio 2010。我不能使用任何像 OpenGl 这样的库,......我只能使用 C# 中的 Graphisc 库。我试图阅读一些教程和讲座,但我仍然不知道如何实现它。

谁能帮我理解我应该如何分解我的问题?或者指导我一些有用的教程?这对我来说是新的,我有点卡住了。

我的任务:

从点发生器对一个简单的间歇泉形状的发光粒子进行编程,将粒子视为不同颜色的点,在平行投影中在黑色背景上的单个轨道上移动。

4

2 回答 2

1

查找,BackgroundWorker最好RenderTargetBitmap在 WPF 中执行此操作

伪代码

backgroundWorker()
{
    while(isRunning)
    {
        update()
        draw()
    }
 }

 update()
 {
     for each all particles
     {
         update gravity and/or relativity to other particles
     }
 }

 draw()
 {
     clear bitmap

     for each all particles
     {
         draw your particle
     }

     set it to your container
 }

这是基于游戏循环

于 2012-05-21T16:19:12.897 回答
1

虽然不是一个完整的答案,但如果这是我的任务,我将如何解决这个问题:

  1. 找到一种方法来渲染单个粒子(可能是一个点或一个球)。我建议从 WPF 开始。
  2. 找到一种以编程方式“移动”该粒子的方法(即随着时间的推移在不同的地方渲染它)。
  3. 创建一个Particle可以存储其当前状态(位置、速度、加速度)并且可以移动(即SetPosition... SetVelocity)的类
  4. 创建一个World表示 3 维空间的类并跟踪其中的所有粒子。World它将了解物理定律,并负责在粒子当前状态下移动它们。
  5. 创建一堆Particle具有相同初始起始位置但随机初始加速度向量的 s。将那些Particles 添加到World. 从那时起,他们将World自动更新他们的位置。
  6. 应用您在第 1 步和第 2 步中学到的知识,以World图形方式表示其所有内容Particles。

编辑:第 7 步将是“循环运行第 6 步”。noHDD 提供的循环代码是一个非常好的基础框架:不断update的世界状态,然后draw是结果。

于 2012-05-21T16:19:20.710 回答