From da4bf7a198ab4d4fe15c4eff9a78bf461f6a9dc4 Mon Sep 17 00:00:00 2001
From: amandaghassaei <amandaghassaei@gmail.com>
Date: Tue, 4 Apr 2017 15:33:06 -0400
Subject: [PATCH] langrangian particles acan't leave boundary

---
 index.html | 10 ++++++++--
 js/main.js |  7 ++++---
 2 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/index.html b/index.html
index 69d8270..b7d39b8 100644
--- a/index.html
+++ b/index.html
@@ -300,6 +300,7 @@
         uniform sampler2D u_velocity;
 
         uniform vec2 u_textureSize;
+        uniform vec2 u_screenSize;
         uniform vec2 u_velocityTextureSize;
 
         uniform float u_dt;
@@ -335,9 +336,14 @@
             vec2 particleCoord = texture2D(u_particles, fragCoord/u_textureSize).xy;
 
             vec2 currentVelocity = 1.0/u_scale*bilinearInterp(vec2(1.0, 1.0) + particleCoord*u_scale/u_velocityTextureSize*(u_velocityTextureSize-vec2(3.0, 3.0)), u_velocity, u_velocityTextureSize);
+            vec2 nextPosition = particleCoord+currentVelocity*u_dt;//explicitly solve advection
 
-            //explicitly solve advection
-            gl_FragColor = vec4(particleCoord+currentVelocity*u_dt, 0, 0);
+            if (nextPosition.x < 0.0) nextPosition.x = 0.0;
+            else if (nextPosition.x >= u_screenSize.x-3.0) nextPosition.x = u_screenSize.x-3.0;
+            if (nextPosition.y < 0.0) nextPosition.y = 0.0;
+            else if (nextPosition.y >= u_screenSize.y-3.0) nextPosition.y = u_screenSize.y-3.0;
+
+            gl_FragColor = vec4(nextPosition, 0, 0);
         }
     </script>
 
diff --git a/js/main.js b/js/main.js
index cabcb20..580f128 100755
--- a/js/main.js
+++ b/js/main.js
@@ -176,7 +176,7 @@ function render(){
         GPU.setProgram("jacobi");
         GPU.setUniformForProgram("jacobi", "u_alpha", -dx*dx, "1f");
         GPU.setUniformForProgram("jacobi", "u_reciprocalBeta", 1/4, "1f");
-        for (var i=0;i<20;i++){
+        for (var i=0;i<10;i++){
             GPU.step("jacobi", ["velocityDivergence", "pressure"], "nextPressure");
             GPU.step("jacobi", ["velocityDivergence", "nextPressure"], "pressure");
         }
@@ -245,8 +245,8 @@ function onResize(){
 
 function resetWindow(){
 
-    actualWidth = body.clientWidth;
-    actualHeight = body.clientHeight;
+    actualWidth = Math.round(body.clientWidth);
+    actualHeight = Math.round(body.clientHeight);
 
     var maxDim = Math.max(actualHeight, actualWidth);
     var _scale = Math.ceil(maxDim/150);
@@ -282,6 +282,7 @@ function resetWindow(){
     GPU.setUniformForProgram("boundary" ,"u_textureSize", [width, height], "2f");
     GPU.setProgram("moveParticles");
     GPU.setUniformForProgram("moveParticles", "u_velocityTextureSize", [width, height], "2f");
+    GPU.setUniformForProgram("moveParticles", "u_screenSize", [actualWidth, actualHeight], "2f");
     GPU.setUniformForProgram("moveParticles" ,"u_scale", scale, "1f");
 
     var velocity = new Float32Array(width*height*4);
-- 
GitLab