From 65d3b72620ad018672b1ee813d3230d34cdc5433 Mon Sep 17 00:00:00 2001 From: Josh Morgenstern <josh@morgenstern.dev> Date: Wed, 22 Sep 2021 15:40:32 +0200 Subject: [PATCH] [#111] add dynamic gravity vector --- projects/sph/shaders/force.comp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/projects/sph/shaders/force.comp b/projects/sph/shaders/force.comp index c8d88f95..ea9b378b 100644 --- a/projects/sph/shaders/force.comp +++ b/projects/sph/shaders/force.comp @@ -4,8 +4,6 @@ const float PI = 3.1415926535897932384626433832795; -#include "particle_params.inc" - layout(local_size_x = 256) in; struct Particle @@ -30,7 +28,15 @@ layout(std430, binding = 0) writeonly buffer buffer_outParticle }; layout( push_constant ) uniform constants{ - float deltaTime; + float h; + float mass; + float gasConstant; + float offset; + float gravity; + float viscosity; + float ABSORBTION; + float dt; + vec3 gravityDir; float particleCount; }; @@ -56,6 +62,7 @@ vec3 viscosityForce = vec3(0, 0, 0); vec3 externalForce = vec3(0, 0, 0); void main() { + uint id = gl_GlobalInvocationID.x; if(id >= int(particleCount)) @@ -63,7 +70,7 @@ void main() { return; } - externalForce = vec3(0, inParticle[id].density * gravity, 0); + externalForce = inParticle[id].density * gravity * vec3(-gravityDir.x,gravityDir.y,gravityDir.z); for(uint i = 0; i < int(particleCount); i++) { @@ -73,8 +80,8 @@ void main() { float dist = length(dir); if(dist != 0) { - pressureForce += mass * -(inParticle[id].pressure + inParticle[i].pressure)/(2.f * inParticle[i].density) * grad_spiky(dist) * normalize(dir); - viscosityForce += mass * (inParticle[i].velocity - inParticle[id].velocity)/inParticle[i].density * laplacian(dist); + pressureForce += mass * -(inParticle[id].pressure + inParticle[i].pressure)/(2.f * inParticle[i].density) * grad_spiky(dist) * normalize(dir); + viscosityForce += mass * (inParticle[i].velocity - inParticle[id].velocity)/inParticle[i].density * laplacian(dist); } } } -- GitLab