【问题标题】:Particle system without OpenGL and other libraries没有OpenGL和其他库的粒子系统
【发布时间】:2012-05-21 16:07:10
【问题描述】:

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

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

我的任务:

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

【问题讨论】:

    标签: c# graphics2d particles particle-system


    【解决方案1】:

    查找 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。除非没有理由为此任务使用任何类型的后台工作人员(甚至对于大多数游戏 - 在主线程上每秒更新所有内容 30-60 次就足够了)
    【解决方案2】:

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

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    相关资源
    最近更新 更多