2

C# でパーティクル システムのプログラムを作成する必要があり、Visual Studio 2010 を使用しています。OpenGl などのライブラリを使用してはいけません。いくつかのチュートリアルや講義を読もうとしましたが、まだ実装方法がわかりません。

問題を分解する方法を理解するのを手伝ってくれる人はいますか? または、役立つチュートリアルについて教えてください。それは私にとって新しいもので、ちょっと行き詰まっています。

私の仕事:

ポイントジェネレーターから間欠泉の形をした単純なジェネレーター発光粒子をプログラムし、平行投影で黒の背景上の単一のトラックを移動するさまざまな色のドットとして粒子を表示します。

4

2 に答える 2

1

調べてください。WPFBackgroundWorkerRenderTargetBitmapこれを行うのがおそらく最善です

疑似コード

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現在の状態 (位置、速度、加速度) を保存でき、移動できる (つまりSetPositionSetVelocity...)クラスを作成します。
  4. World3 次元空間を表し、その中のすべての粒子を追跡するクラスを作成します。はWorld物理法則を知っており、現在の状態で粒子を移動させる役割を果たします。
  5. Particle初期開始位置は同じですが、初期加速度ベクトルがランダムな の束を作成します。それらを に追加ParticleWorldます。はWorld、それ以降、それらの位置を自動的に更新します。
  6. ステップ 1 と 2 で学んだことを適用して、Worldすべての をグラフィカルに表現しますParticle

編集:ステップ7は「ステップ6をループで実行する」ことです。noHDD によって提供されるループ コードは、非常に優れた基本的なフレームワークです。継続的に世界update状態drawと結果が表示されます。

于 2012-05-21T16:19:20.710 に答える