Я реализовал систему частиц пружины в OpenGL, где частица B ограничена до A с заданным расстоянием смещения.На частицу В влияет сила и сила тяжести пружины.Вот реализация:
vec3 velocity;
float k = 1.0f;
float damping = 0.1f;
dt = 0.01f;
void ImplementSpring(vec3 &Apos, vec3 &Bpos, float offsetDistance) {
vec3 dir = Apos-Bpos;
vec3 normdir = normalize(dir);
float currentDistance = length(dir);
//Forces
vec3 gravity = vec3(0, -1, 0)*dt;
vec3 spring = normdir*(currentDistance-offsetDistance)*k*dt;
vec3 dampingForce = velocity*damping;
//Calculate velocity
vec3 acceleration = (gravity+spring-dampingForce)/particleMass;
velocity += acceleration;
Bpos += velocity;
}
void main() {
ImplementSpring(vec3(0, 0, 0), vec3(0, -3, 0), 4);
}
Теперь, если я увеличу демпфирование, пружина становится более жесткой, но на гравитацию также влияют демпфирование / трение.Таким образом, частица в основном падает в «медленном движении» с высокими значениями демпфирования.
Как я могу отредактировать сценарий, чтобы сделать пружину более жесткой, но при этом не влиять на гравитацию?
Править: Я использую библиотеку glm math для моих расчетов.
Редактировать 2: Если damping
изменяется на высокое значение, например 0.9
, вы можете увидеть проблему, так как частица будет очень медленной, чтобы на нее влияла гравитация.