私は通常、新しい粒子を作成し、それらを更新し、破壊する粒子システムを持っています...
エミッタ モジュールには、パーティクルをリセットする for ループがあります。
foreach p in particles
p.position = rand()
p.velocity = rand()
通常、C の rand() 関数を使用すると均一な分布が得られますが、他の分布 (ガウスなど) を使用したい場合はどうすればよいでしょうか?
そのコードを変更して、新しい粒子のパラメーターを生成するいくつかの (または少なくとも 2 つの) 異なる方法を処理する方法は?
もちろん、RandomGenerator などのオブジェクトを作成し、いくつかの仮想関数呼び出しを使用して、これらのさまざまな動作を処理できます。しかし、このコードは非常に高速である必要があるため (数千の粒子を更新する場合)、仮想関数を使用するのは良くないと思います。
または多分私は気にせず、単に書くべきです:
foreach p in particles
p.position = useGaussian ? gausRand() : UniRand()
p.velocity = useGaussian ? gausRand() : UniRand()
異なるディストリビューションの数を絞り込んで、そのうちの 2 つまたは 3 つだけを使用することができます...
私の例は非常に単純ですが、実際のコードではいくつかの粒子パラメータ構成があることに注意してください。
その件について一般的なアドバイスをいただきたいです。