現在我們有火焰了,但是呢如果今天我的火焰想要有點這種效果呢。
感覺有個颱風在那裏影響火焰的走向。
所以我們就來模擬颱風。
颱風會有旋轉的速度,而他這個速度會影響到 Particle 的行徑方向。
而颱風能夠影響 Particle 的有 pos
,speed
跟颱風的size
struct vortex{
glm::vec2 pos = {0.f, 0.f};
float speed = 0.f;
float scale = 0.f;
}
然後更改一下我們的 Particle
的更新方法。
float dx = particle.pos.x - vortex.pos.x;
float dy = particle.pos.y - vortex.pos.y;
float vx = -dy * vortex.turbulence.x;
float vy = dx * vortex.turbulence.y;
factor_ = 1.0f/ (1.0f + (dx*dx + dy*dy)/vortex.currentSize*0.1);
particle.pos.x += (vx - particle.currentVel.x) * factor_ + particle.currentVel.x * dt;
particle.pos.y += (vy - particle.currentVel.y) * factor_ + particle.currentVel.y * dt;
不過剛剛這個是靜態的颱風,如果希望颱風也能隨時間移動的話其實也不難。因為只要把颱風當作另一個 Particle,跟著一起排放就好了。
動態颱風我們會需要更改我一些code
factor_ = 1.0f/ (1.0f + (dx*dx + dy*dy)/(vortex.currentSize*0.1));
float lifeFactor = vortex.life/emitter.vortexMaxParticleLife;
factor_ *= (1-lifeFactor)*lifeFactor*4;
我們的颱風也會隨時間移動,而也會隨時間消失,我們希望在颱風快死亡時對 Particle 的影響減小。
左邊那個就是有 動態 vortex 影響喔