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);
|
||||
}
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
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