「がんばれない」けど「がんばりたい」

ITエンジニアの仕事のこと。AI、機械学習、ディープラーニング。地頭力。車のこと。

Particle System|Nature of Code

Particle Systemの基本・考え方 (すっごいシンプルなシステムから〜)

パーティクルシステムについては、いろんな文献で取りあげられているし、フレームワークやライブラリに元々機能として入っている事が殆どだったりするのかもですが。ここで述べるパーティクルシステムはパーティクルクラスをコントロールするクラスについて記述します。基本的にパーティクルクラスは表現したいものによって実装内容は変わってくるのですが、これまでのNatureOfCodeに添っていきます。まずパーティクルクラスについては、ぶっちゃけ、これまで扱ってきたMoverクラスを使用します。一応特徴をまとめると。

  1. velocity, acceleration, locationを持つ。
  2. emmit(生まれる)される場所 〜最初のlocation〜 が指定出来る。
  3. 命を持っている。命が切れたら死ぬ、
  4. applyForce(ofVec3f force)メソッドを持ち、外的力を与えられる

こんなところですか。。3.については初めて書きましたがパーティクルを多数発生させるときや、時間と共に増やしたらりすると使用メモリが増えてくるので、画面に描画する必要がなくなったタイミングのパーティクルを判別するためにlifeみたいなfloat型なんかの変数を用意して命を与えておいて、毎フレーム毎などで命を削っていったり、もしくは画面範囲内から見えなくなったタイミングで、そのパーティクルオブジェクトをメモリから削除したりします。 2、3年前にライゾマティクスで開催されたopenFrameworksのワークショップ(ofxWorkshopだっかたな…)の1日目で、同じようなコード例で勉強した事を思い出します。。

えーっとパーティクルシステムの話に戻しますが結局ここって設計の問題なので人によって違う…けど、Nature Of Codeに添って行きます!といっても、下のような構成でクラスをつくってまとめているだけなのですが。testApp内のupdate()でaddParticle()をしていますが、この辺とかは、どこで管理させるか?は、都度考えるポイントだったりすると思います。実際のコード掲載必要かなぁ…