パーティクルシステムはどのように機能しますか?


7

ゲームにパーティクルシステムを実装したいのですが、パーティクルシステムをプログラミングしたことがなく、どこから始めればよいかわかりません。

GL_POINTテクスチャを使わずに、ブロックを打ったときにTerrariaやMinecraftなどのさまざまな場所にさまざまなサイズのピクセル(s)を表示したいだけです。ほんの簡単な例です。

このためのGoogle検索結果は非常に複雑になる傾向があるか、概念を説明しないか、OOPなしでは読みにくいCで書かれています…

JavaとOpenGLを使用しています。

回答:


9

キーワードはパーティクルシステムであるため、実際のサンプルのほとんどは、単純なデモンストレーションよりも複雑になります。OOPは実際にはパーティクルシステムの低レベルの部分には入りません。Cは他の言語に変換するのが非常に簡単なので、心配する必要はありません。

パーティクルの秘訣は、LOTをできるだけ速く表示したいということです。これは、すべてが何らかの方法で最適化されているため、表示されるコードの種類に色を付けます。

最も単純な形式では、迅速なスプラッシュエフェクト用のパーティクルシステムには次の要素があります。

  1. すべてのシステムを追跡し、すべての効果をグローバルに制御するマネージャー。
  2. それぞれが位置、速度、寿命、表示サイズを持つ「ポイント」の配列。
  3. 開始位置と(おそらく)ランダムな速度と寿命を持つ配列を作成する関数。
  4. その配列でシミュレーションを実行する関数。これは、最後のシミュレーション呼び出しからのデルタ時間をおそらく必要とします。
  5. 位置と表示サイズを取得してOpenGLで表示する関数。
  6. そして最後に、すべてのポイントが死んだときにそのシステムの再生を停止する監督者。

内側のループがスピードを求めて自分自身を維持している限り、関数の編成はより高いレベルでOOPにすることができます。以下の非常に緩い疑似コードシーケンス。詳細を省略し、まっすぐなCの概念を安っぽいOOPと混ぜて一致させますが、それが理にかなっていると思います。このためのクラス設計は、他の完全な議論になります=)

たとえば、世界の場所(10、20、30)でレンガを打ったとします。次に、マネージャーを呼び出して、その場所で新しいポイントパーティクルシステムを起動するように依頼します。次に、マネージャーはPointsClassに位置(10、20、30)に自分自身を作成するように要求します。クラスは、ライフタイムなどを割り当ててランダム化します。次に、マネージャーは、シミュレーション呼び出しで各フレームを制御するすべてのアクティブなパーティクルシステムを呼び出します。後でそのフレームは、それ自体をGLコンテキストに描画するようPointsClassに要求します。完了するまでループします。


投稿ありがとうございます!今、私はこれについて明確な考えを持っています。パーティクルシステムについてのNeHeチュートリアルに一休みする予定です。
ピュイオーバー2011

NeHeは素晴らしい場所です。そこで失敗することはありません。幸運を祈ります。
Patrick Hughes
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.