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

本文关键字:粒子系统 其他 OpenGL 没有 | 更新日期: 2023-09-27 18:34:45

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

任何人都可以帮助我理解我应该如何分解我的问题吗?或者指导我一些有用的教程?这对我来说是新的,我有点卡住了。

我的任务:

从点发生器

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

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

查找BackgroundWorkerRenderTargetBitmap最好在 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
 }

这是基于游戏循环

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

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

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