没有OpenGL和其他库的粒子系统

时间:2012-05-21 16:07:10

标签: c# graphics2d particles particle-system

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

有人能帮我理解我应该如何分解我的问题吗?或者直接告诉我一些有用的教程?这对我来说很新,而且我有点卡住了。

我的任务:

  

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

2 个答案:

答案 0 :(得分:1)

查找BackgroundWorkerRenderTargetBitmap最好在WPF中执行此操作

Psuedo代码

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
 }

这是基于游戏循环

答案 1 :(得分:1)

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

  1. 找到渲染单个粒子的方法(可能是点或球)。我建议从WPF开始。
  2. 找到一种以编程方式“移动”粒子的方法(即通过随时间在不同位置渲染)。
  3. 创建一个Particle类,可以存储其当前状态(位置,速度,加速度)并可以移动(即SetPositionSetVelocity ...)
  4. 创建一个World类,代表一个三维空间,并跟踪其中的所有粒子。 World将知道物理定律,并将负责在给定当前状态的情况下移动粒子。
  5. 创建一堆具有相同初始起始位置但随机初始加速度向量的Particle s。将Particle添加到WorldWorld将从此后自动更新其位置。
  6. 应用您在步骤1和2中学到的知识,让World以图形方式表示其所有Particle
  7. 编辑:第7步是“在循环中运行第6步”。 noHDD提供的循环代码是一个非常好的基本框架:持续update世界的状态,然后draw结果。