From d721f9be6952f7f87b856e91fae5ae8a1b637060 Mon Sep 17 00:00:00 2001
From: Josh Morgenstern <josh@morgenstern.dev>
Date: Tue, 14 Sep 2021 13:05:05 +0200
Subject: [PATCH] [#111] prevent force calculation for particle with itself

---
 projects/sph/shaders/force.comp | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/projects/sph/shaders/force.comp b/projects/sph/shaders/force.comp
index 865d6be5..54ce5d36 100644
--- a/projects/sph/shaders/force.comp
+++ b/projects/sph/shaders/force.comp
@@ -62,10 +62,13 @@ void main() {
 
     for(uint i = 0; i < inParticle.length(); i++)  
     {
-        vec3 dir = inParticle[id].position - inParticle[i].position;
-        float dist = length(dir);
-        pressureForce += mass * -(inParticle[id].pressure + inParticle[i].pressure)/(2.f * inParticle[i].density) * spiky(dist) * normalize(dir);
-        viscosityForce += mass * (inParticle[id].velocity - inParticle[i].velocity)/inParticle[i].density * laplacian(dist);
+        if (id != i)
+        {
+            vec3 dir = inParticle[id].position - inParticle[i].position;
+            float dist = length(dir);
+            pressureForce += mass * -(inParticle[id].pressure + inParticle[i].pressure)/(2.f * inParticle[i].density) * spiky(dist) * normalize(dir);
+            viscosityForce += mass * (inParticle[id].velocity - inParticle[i].velocity)/inParticle[i].density * laplacian(dist);
+        }
     }
     viscosityForce *= viscosity;
 
-- 
GitLab