physics: add particle_force_generator
This commit is contained in:
parent
0c245870b8
commit
0efe4dc74d
@ -29,4 +29,35 @@ namespace physics {
|
|||||||
|
|
||||||
particle->add_force(normalize(force) * drag_coeff);
|
particle->add_force(normalize(force) * drag_coeff);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void particle_spring::update_force(particle * particle, float duration)
|
||||||
|
{
|
||||||
|
vec3 force = particle->position - other->position;
|
||||||
|
|
||||||
|
float intensity = abs<float>(magnitude(force) - rest_length) * spring_constant;
|
||||||
|
|
||||||
|
particle->add_force(normalize(force) * -intensity);
|
||||||
|
}
|
||||||
|
|
||||||
|
void particle_anchored_spring::update_force(particle * particle, float duration)
|
||||||
|
{
|
||||||
|
vec3 force = particle->position - *anchor;
|
||||||
|
|
||||||
|
float intensity = abs<float>(magnitude(force) - rest_length) * spring_constant;
|
||||||
|
|
||||||
|
particle->add_force(normalize(force) * -intensity);
|
||||||
|
}
|
||||||
|
|
||||||
|
void particle_bungee::update_force(particle * particle, float duration)
|
||||||
|
{
|
||||||
|
vec3 force = particle->position - other->position;
|
||||||
|
|
||||||
|
float _magnitude = magnitude(force);
|
||||||
|
if (_magnitude <= rest_length)
|
||||||
|
return;
|
||||||
|
|
||||||
|
float intensity = spring_constant * (rest_length - _magnitude);
|
||||||
|
|
||||||
|
particle->add_force(normalize(force) * -intensity);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -44,4 +44,31 @@ namespace physics {
|
|||||||
|
|
||||||
void update_force(particle * particle, float duration) override;
|
void update_force(particle * particle, float duration) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct particle_spring : particle_force_generator
|
||||||
|
{
|
||||||
|
physics::particle * other;
|
||||||
|
float spring_constant;
|
||||||
|
float rest_length;
|
||||||
|
|
||||||
|
void update_force(particle * particle, float duration) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct particle_anchored_spring : particle_force_generator
|
||||||
|
{
|
||||||
|
vec3 * anchor;
|
||||||
|
float spring_constant;
|
||||||
|
float rest_length;
|
||||||
|
kk
|
||||||
|
void update_force(particle * particle, float duration) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct particle_bungee : particle_force_generator
|
||||||
|
{
|
||||||
|
physics::particle * other;
|
||||||
|
float spring_constant;
|
||||||
|
float rest_length;
|
||||||
|
|
||||||
|
void update_force(particle * particle, float duration) override;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user