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