1

私は学生向けゲームのパーティクルシステムを書いていますが、ちょっとした問題に遭遇しました。船のロケットへの影響を改善したいのですが、どうすればいいのかわからないようです。

静止している船での効果は次のようになります。

代替テキスト

そして、これが移動中の船でどのように見えるかです:

代替テキスト

炎は一貫して同じ長さにしたいと思います。ParticleTick関数は次のとおりです。

void Particle::Tick(float a_DT)
{
    // temporarily turned off to see the effect of the rest of the code more clearly
//m_Pos += m_Vel;

    if (m_Owner) { m_Pos += m_Owner->GetParentSpeed(); }

    m_Life -= 1;

    if (m_Life <= 0) { m_Alive = false; }
}

前もって感謝します。

編集:物事を少しクリアするために、エフェクトを追跡したいのですが、エミッターの速度に関係なく同じように追跡したいと思います。

4

3 に答える 3

6

親船の速度に応じてパーティクルの移動を速くしたり遅くしたりしていますが、パーティクルの寿命は一定であり、ゼロに達するまで1ずつ減っていきます。

おそらくやりたいことは、ライフタイムをティック数ではなく距離値に設定することです。次に、寿命から船の速度(または各ティックの各パーティクルに追加するもの)を差し引きます。寿命がマイナスになったら、パーティクルを殺します。


それがあなたの望みだと思います...しかし、アルゴリズムに2つの変更を加えると、よりクールに(そしてより現実的に)なる可能性があります。

  1. エンジンから出てくるパーティクルの速度が推力(速度だけでなく加速)に基づいている場合、現在の動作(テールの長さ)は正しいです。

  2. 粒子がエンジンを離れると、船の速度/方向の変化はエンジンに影響を与えません。パーティクルが放出されると、その速度と方向は、粒子が消えるまで一定です。これは、船を回しているとき、または加速度を劇的に変化させているときに、実際にはかなりクールに見えるはずです。

乾杯。

于 2010-02-02T22:48:26.417 に答える
0

一貫して独自の長さを持たせたい場合は、親の速度で割って親の速度を正規化する必要があります。明らかに、これは親が静止している場合は機能しないため、その場合はパーティクルに対して何らかの「アイドル」状態が必要になります(ランダムな円錐形の分布など)。

また、コンストラクターで速度のみを取得し、ティックの間はそれを使用し続けます。

于 2010-02-02T17:08:39.320 に答える
0

システムに確率変数はありますか?エミッターあたりの粒子数、粒子寿命など?これにより、トレイルの長さが変化します。

于 2010-02-02T17:19:05.333 に答える