commit 849e0034b5c14afeb8bb3e2e03d10adc2c872128
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Sat Feb 29 22:45:25 2020 +0000

    Moving the Vertex and Fragment centers of effect to the center of the Mesh.

diff --git a/src/main/java/org/distorted/examples/bean/BeanRenderer.java b/src/main/java/org/distorted/examples/bean/BeanRenderer.java
index 8127671..a2355ed 100644
--- a/src/main/java/org/distorted/examples/bean/BeanRenderer.java
+++ b/src/main/java/org/distorted/examples/bean/BeanRenderer.java
@@ -51,7 +51,7 @@ class BeanRenderer implements GLSurfaceView.Renderer
    private DistortedScreen mScreen;
    private DistortedTexture mTexture;
    private MeshRectangles mMesh;
-   private Static3D mScale, mBrowL, mBrowR;
+   private Static3D mScale;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -59,7 +59,8 @@ class BeanRenderer implements GLSurfaceView.Renderer
       {
       mView = v;
      
-
+      Static3D pointLeft  = new Static3D(-85,  57, 0);
+      Static3D pointRight = new Static3D( 50, 100, 0);
       Static4D regionLeft = new Static4D( -3, 33, 0, 47);
       Static4D regionRight= new Static4D(-14, 33, 0, 47);
       Dynamic3D dynLeft   = new Dynamic3D(2000,0.0f);
@@ -83,12 +84,10 @@ class BeanRenderer implements GLSurfaceView.Renderer
       dynRight.add(vect1);
 
       mScale= new Static3D(1,1,1);
-      mBrowL= new Static3D(0,0,0);
-      mBrowR= new Static3D(0,0,0);
 
       mEffects = new DistortedEffects();
-      mEffects.apply( new VertexEffectDistort(dynLeft , mBrowL, regionLeft) );
-      mEffects.apply( new VertexEffectDistort(dynRight, mBrowR, regionRight));
+      mEffects.apply( new VertexEffectDistort(dynLeft , pointLeft , regionLeft) );
+      mEffects.apply( new VertexEffectDistort(dynRight, pointRight, regionRight));
       mEffects.apply( new MatrixEffectScale(mScale) );
 
       mScreen = new DistortedScreen();
@@ -136,9 +135,6 @@ class BeanRenderer implements GLSurfaceView.Renderer
      int bmpHeight = bitmap.getHeight();
      int bmpWidth  = bitmap.getWidth();
 
-     mBrowL.set( 98 - bmpWidth/2, 297 - bmpHeight/2, 0);
-     mBrowR.set(233 - bmpWidth/2, 340 - bmpHeight/2, 0);
-
      if( mTexture==null ) mTexture = new DistortedTexture();
      mTexture.setTexture(bitmap);
 
diff --git a/src/main/java/org/distorted/examples/catanddog/CatAndDogRenderer.java b/src/main/java/org/distorted/examples/catanddog/CatAndDogRenderer.java
index 4c6f324..462b8f4 100644
--- a/src/main/java/org/distorted/examples/catanddog/CatAndDogRenderer.java
+++ b/src/main/java/org/distorted/examples/catanddog/CatAndDogRenderer.java
@@ -77,9 +77,9 @@ class CatAndDogRenderer implements GLSurfaceView.Renderer
       moveDyn.add(mMoveStartingPoint);
       moveDyn.add(mMoveEndPoint);
 
-      Static3D chromaCenter= new Static3D( 530, 300, 0   );
+      Static3D chromaCenter= new Static3D( 130,  50, 0   );
       Static3D chromaRegion= new Static3D( 100, 100, 100 );
-      Static3D alphaCenter = new Static3D( 230, 300, 0   );
+      Static3D alphaCenter = new Static3D(-170,  50, 0   );
       Static3D alphaRegion = new Static3D( 100, 100, 100 );
 
       Dynamic1D chromaDyn = new Dynamic1D(DURATION_CHROMA_ALPHA,0.0f);
diff --git a/src/main/java/org/distorted/examples/deform/DeformRenderer.java b/src/main/java/org/distorted/examples/deform/DeformRenderer.java
index dfbec3c..79d594a 100644
--- a/src/main/java/org/distorted/examples/deform/DeformRenderer.java
+++ b/src/main/java/org/distorted/examples/deform/DeformRenderer.java
@@ -236,10 +236,8 @@ class DeformRenderer implements GLSurfaceView.Renderer, EffectListener
 
    void down(int x, int y)
      {
-     int xt = x-(scrWidth -textureWidth )/2;
-     int yt = y-(scrHeight-textureHeight)/2;
-
-     yt = textureHeight - yt;  // OpenGL coord system and 2D coords have inverted Y axis
+     int xt = x-(scrWidth/2);
+     int yt = (scrHeight/2)-y;
 
      switch(mMode)
        {
@@ -256,7 +254,7 @@ class DeformRenderer implements GLSurfaceView.Renderer, EffectListener
        case SHEAR  : vShear[0].set(0,0,0);
                      mEffects.apply(mMovingShear);
                      mLastEffect = mMovingShear.getID();
-                     mTouchPoint.set(xt-textureWidth/2,yt-textureHeight/2,0);
+                     mTouchPoint.set(xt,yt,0);
                      break;
        }
      }
diff --git a/src/main/java/org/distorted/examples/girl/GirlRenderer.java b/src/main/java/org/distorted/examples/girl/GirlRenderer.java
index 0c1de8c..40192f8 100644
--- a/src/main/java/org/distorted/examples/girl/GirlRenderer.java
+++ b/src/main/java/org/distorted/examples/girl/GirlRenderer.java
@@ -65,9 +65,9 @@ class GirlRenderer implements GLSurfaceView.Renderer
       {
       mView = v;
 
-      Static3D pLeft = new Static3D(132, 336, 0);
-      Static3D pRight= new Static3D(247, 336, 0);
-      
+      Static3D pLeft = new Static3D(-68, 36, 0);
+      Static3D pRight= new Static3D( 47, 36, 0);
+
       // Size
       Static4D sinkRegion = new Static4D(0,0,0,60);
       
@@ -98,7 +98,7 @@ class GirlRenderer implements GLSurfaceView.Renderer
       diR.add(v1);
       
       // Lower Movement
-      Static3D pHips      = new Static3D(216,95,0);
+      Static3D pHips      = new Static3D( 16,-205,0);
       Static4D HipsRegion = new Static4D(0,0,0,120);
       Dynamic1D diHips    = new Dynamic1D(1500,0.0f);
       
diff --git a/src/main/java/org/distorted/examples/listener/ListenerRenderer.java b/src/main/java/org/distorted/examples/listener/ListenerRenderer.java
index f39a347..c1173cf 100644
--- a/src/main/java/org/distorted/examples/listener/ListenerRenderer.java
+++ b/src/main/java/org/distorted/examples/listener/ListenerRenderer.java
@@ -75,11 +75,11 @@ class ListenerRenderer implements GLSurfaceView.Renderer,EffectListener
 
    private boolean addNewBubble()
       {
-      int radius   = (int)(( 0.10f + 0.70f*mRnd.nextFloat())*bmpWidth);           // pop up a bubble of size (radius,height)
-      int height   = (int)((-0.10f + 0.20f*mRnd.nextFloat())*bmpWidth);           // 
-      int pointx   = mRnd.nextInt( (int)(0.8f*bmpWidth ))+ (int)(0.1f*bmpWidth ); // at a random place on the bitmap (but not near the edge)
-      int pointy   = mRnd.nextInt( (int)(0.8f*bmpHeight))+ (int)(0.1f*bmpHeight); // 
-      int duration = 1000 + mRnd.nextInt(3000);                                   // for anytime from 1 to 4 seconds
+      int radius   = (int)(( 0.10f + 0.70f*mRnd.nextFloat())*bmpWidth); // pop up a bubble of size (radius,height)
+      int height   = (int)((-0.10f + 0.20f*mRnd.nextFloat())*bmpWidth); //
+      int pointx   = (int)(0.8f * bmpWidth * (mRnd.nextFloat()-0.5f));  // at a random place on the bitmap (but not near the edge)
+      int pointy   = (int)(0.8f * bmpHeight* (mRnd.nextFloat()-0.5f));  //
+      int duration = 1000 + mRnd.nextInt(3000);                         // for anytime from 1 to 4 seconds
 
       Dynamic3D dDistort = new Dynamic3D(duration,1.0f);
       dDistort.add(new Static3D(0,0,     0));
diff --git a/src/main/java/org/distorted/examples/monalisa/MonaLisaRenderer.java b/src/main/java/org/distorted/examples/monalisa/MonaLisaRenderer.java
index 29d5dbe..b1d982b 100644
--- a/src/main/java/org/distorted/examples/monalisa/MonaLisaRenderer.java
+++ b/src/main/java/org/distorted/examples/monalisa/MonaLisaRenderer.java
@@ -51,7 +51,6 @@ class MonaLisaRenderer implements GLSurfaceView.Renderer
     private MeshRectangles mMesh;
     private DistortedScreen mScreen;
     private Static3D mScale;
-    private Static3D mCenterLeft, mCenterRight;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -59,11 +58,10 @@ class MonaLisaRenderer implements GLSurfaceView.Renderer
       {
       mView = v;
 
-      // two points, centers of the Distort effect
-      // the left and right tip of the mouth
-      // (0,0,0) for now because we don't know the size of the bitmap yet.
-      mCenterLeft  = new Static3D(0,0,0);
-      mCenterRight = new Static3D(0,0,0);
+      // MonaLisa bitmap is 320x366, this is thus (90,108) pixels from the lower-left corner
+      Static3D centerLeft  = new Static3D( 90-320/2, 108-366/2,0);
+      // (176,111) from the lower left
+      Static3D centerRight = new Static3D(176-320/2, 111-366/2,0);
 
       // two regions defining the areas affected by the Distort effect
       Static4D rLeft  = new Static4D(-10, 10, 0, 25);
@@ -85,8 +83,8 @@ class MonaLisaRenderer implements GLSurfaceView.Renderer
       dRight.add( new Static3D( 20, 10, 0) );
 
       mEffects = new DistortedEffects();
-      mEffects.apply( new VertexEffectDistort(dLeft , mCenterLeft , rLeft ) );
-      mEffects.apply( new VertexEffectDistort(dRight, mCenterRight, rRight) );
+      mEffects.apply( new VertexEffectDistort(dLeft , centerLeft , rLeft ) );
+      mEffects.apply( new VertexEffectDistort(dRight, centerRight, rRight) );
 
       mScale= new Static3D(1,1,1);
       mEffects.apply(new MatrixEffectScale(mScale));
@@ -136,11 +134,6 @@ class MonaLisaRenderer implements GLSurfaceView.Renderer
       int bmpHeight = bitmap.getHeight();
       int bmpWidth  = bitmap.getWidth();
 
-      // Now we know the size of the bitmap, we can set the centers of effects
-      // to (90,108) from the lower-left corner (CenterLeft) and (176,111) from the corner.
-      mCenterLeft .set( 90 - bmpWidth/2, 108 - bmpHeight/2, 0);
-      mCenterRight.set(176 - bmpWidth/2, 111 - bmpHeight/2, 0);
-
       // We could have gotten here after the activity went to the background
       // for a brief amount of time; in this case mTexture is already created.
       // Do not leak memory by creating it the second time around.
