commit b041d424604eeaa17206b51f561365af1f4512c0
Author: Leszek Koltunski <leszek@distoretedandroid.org>
Date:   Mon Nov 7 15:59:23 2016 +0000

    Minor details

diff --git a/src/main/java/org/distorted/examples/bean/BeanRenderer.java b/src/main/java/org/distorted/examples/bean/BeanRenderer.java
index ecf888c..d039310 100644
--- a/src/main/java/org/distorted/examples/bean/BeanRenderer.java
+++ b/src/main/java/org/distorted/examples/bean/BeanRenderer.java
@@ -57,17 +57,17 @@ class BeanRenderer implements GLSurfaceView.Renderer
       {
       mView = v;
      
-      pLeft = new Static2D(100, 199);
+      pLeft = new Static2D(106, 192);
       pRight= new Static2D(230, 150);
       
       rLeft = new Static4D(-9,-31,35,35);
       rRight= new Static4D(-9,-31,35,35);
      
-      dLeft = new Dynamic3D(1500,0.0f);
-      dRight= new Dynamic3D(1500,0.0f);
+      dLeft = new Dynamic3D(2000,0.0f);
+      dRight= new Dynamic3D(2000,0.0f);
 
       Static3D p1 = new Static3D(  0,  0, 0);
-      Static3D p2 = new Static3D(-10,-34, 0);
+      Static3D p2 = new Static3D(-10,-30, 0);
       
       dLeft.add(p1);
       dLeft.add(p1);
@@ -143,7 +143,7 @@ class BeanRenderer implements GLSurfaceView.Renderer
       bmpHeight = bitmap.getHeight();
       bmpWidth  = bitmap.getWidth();
       
-      mBean = new DistortedBitmap(bitmap, 9);
+      mBean = new DistortedBitmap(bitmap, 30);
       mBean.distort(dLeft , pLeft , rLeft );
       mBean.distort(dRight, pRight, rRight);
       
diff --git a/src/main/java/org/distorted/examples/dynamic/DynamicSurfaceView.java b/src/main/java/org/distorted/examples/dynamic/DynamicSurfaceView.java
index 1d04933..2ff68ff 100644
--- a/src/main/java/org/distorted/examples/dynamic/DynamicSurfaceView.java
+++ b/src/main/java/org/distorted/examples/dynamic/DynamicSurfaceView.java
@@ -57,6 +57,7 @@ public class DynamicSurfaceView extends GLSurfaceView
     private int moving;
     private int mDuration;
     private int mPosition;
+    private long mDiffTime, mLastTime;
     private float mNoise0, mNoise1, mNoise2;
 
     private int mSize1, mSize2, mSizeT, mAvg;
@@ -89,6 +90,8 @@ public class DynamicSurfaceView extends GLSurfaceView
       mNoise0   = 0.0f;
       mNoise1   = 0.0f;
       mNoise2   = 0.0f;
+      mDiffTime = -1;
+      mLastTime = -1;
 
       di1D = new Dynamic1D(mDuration,0.0f);
       p1N  = new Static1D(mNoise0);
@@ -193,7 +196,16 @@ public class DynamicSurfaceView extends GLSurfaceView
     public void drawCurve(Canvas c, long time)
       {
       if ( ++mPosition >= NUM_POINTS ) mPosition=0;
-         
+
+      if( mLastTime<0 )
+        {
+        mLastTime = time;
+        }
+      else
+        {
+        mDiffTime = time - mLastTime;
+        }
+
       synchronized(lock)
         {
         switch(currentDim)
@@ -203,6 +215,8 @@ public class DynamicSurfaceView extends GLSurfaceView
           default    : drawCurve3D(c,time); break;
           }
         }
+
+      mLastTime = time;
       }
 
 ///////////////////////////////////////////////////////////////////
@@ -227,7 +241,7 @@ public class DynamicSurfaceView extends GLSurfaceView
 
       if( len>=2 )
         {
-        di1D.interpolateMain(mPoints,3*mPosition, time);
+        di1D.interpolateMain(mPoints,3*mPosition, time, mDiffTime);
 
         for(int i=0; i<NUM_POINTS; i++)
           {
@@ -263,7 +277,7 @@ public class DynamicSurfaceView extends GLSurfaceView
       
       if( len>=2 )
         {
-        di2D.interpolateMain(mPoints,3*mPosition, time);
+        di2D.interpolateMain(mPoints,3*mPosition, time, mDiffTime);
 
         for(int i=0; i<NUM_POINTS; i++)
           {
@@ -299,7 +313,7 @@ public class DynamicSurfaceView extends GLSurfaceView
       
       if( len>=2 )
         {
-        di3D.interpolateMain(mPoints, 3*mPosition, time);
+        di3D.interpolateMain(mPoints, 3*mPosition, time, mDiffTime);
 
         for(int i=0; i<NUM_POINTS; i++)
           {
diff --git a/src/main/java/org/distorted/examples/wind/WindEffectsManager.java b/src/main/java/org/distorted/examples/wind/WindEffectsManager.java
index 9b069af..55fb2f0 100644
--- a/src/main/java/org/distorted/examples/wind/WindEffectsManager.java
+++ b/src/main/java/org/distorted/examples/wind/WindEffectsManager.java
@@ -22,20 +22,30 @@ package org.distorted.examples.wind;
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 import org.distorted.library.DistortedObject;
+import org.distorted.library.type.Dynamic;
 import org.distorted.library.type.Dynamic3D;
+import org.distorted.library.type.Dynamic5D;
 import org.distorted.library.type.Static3D;
+import org.distorted.library.type.Static4D;
+import org.distorted.library.type.Static5D;
 
 class WindEffectsManager
   {
-  private Static3D shearFactor;
+  private Static3D  shearFactor;
   private Dynamic3D shearDynamic;
-  private Static3D scaleFactor;
+  private Static3D  scaleFactor;
   private Dynamic3D scaleDynamic;
+  private Static3D  deformForce;
+  private Static5D  windFactor1, windFactor2;
+  private Dynamic5D windDynamic;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  WindEffectsManager()
+  WindEffectsManager(DistortedObject obj)
     {
+    int h = obj.getHeight();
+    int w = obj.getWidth();
+
     shearFactor = new Static3D(0,0,0);
     shearDynamic= new Dynamic3D();
     shearDynamic.add(shearFactor);
@@ -43,17 +53,34 @@ class WindEffectsManager
     scaleFactor = new Static3D(1,1,1);
     scaleDynamic= new Dynamic3D();
     scaleDynamic.add(scaleFactor);
+
+    deformForce = new Static3D(w/3,0,0);
+
+    windFactor1 = new Static5D(h/10,h/5, 180, 0, 90);
+    windFactor2 = new Static5D(h/10,h/5,-180, 0, 90);
+    windDynamic = new Dynamic5D(1000,0.0f);
+    windDynamic.add(windFactor1);
+    windDynamic.add(windFactor2);
+    windDynamic.setMode(Dynamic.MODE_JUMP);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   synchronized void apply(DistortedObject obj, int wind)
     {
-    Static3D center = new Static3D(0,obj.getHeight()/2,0);
+    int h = obj.getHeight();
+    int w = obj.getWidth();
+
+    Static3D midLeft = new Static3D(0,h/2,0);
+    Static3D midRight = new Static3D(w,h/2,0);
+    Static4D windRegion = new Static4D(0,0,w,h);
+
     setWind(wind);
 
-    obj.shear(shearDynamic,center);
+    obj.shear(shearDynamic,midLeft);
     obj.scale(scaleDynamic);
+    obj.deform(deformForce,midRight);
+    obj.wave(windDynamic, midRight, windRegion);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -64,5 +91,6 @@ class WindEffectsManager
 
     shearFactor.set2(tanAngle);
     scaleFactor.set1(1/(float)Math.sqrt(1+tanAngle*tanAngle));
+    windDynamic.setDuration( wind > 0 ? 100000/wind : Long.MAX_VALUE);
     }
   }
diff --git a/src/main/java/org/distorted/examples/wind/WindRenderer.java b/src/main/java/org/distorted/examples/wind/WindRenderer.java
index cbb4c28..f9856b6 100644
--- a/src/main/java/org/distorted/examples/wind/WindRenderer.java
+++ b/src/main/java/org/distorted/examples/wind/WindRenderer.java
@@ -55,7 +55,7 @@ class WindRenderer implements GLSurfaceView.Renderer
       mView = view;
 
       mObject = new DistortedCubes(50,30,10,false);
-      mEffects = new WindEffectsManager();
+      mEffects = new WindEffectsManager(mObject);
 
       mObjWidth = mObject.getWidth();
       mObjHeight= mObject.getHeight();
@@ -83,13 +83,11 @@ class WindRenderer implements GLSurfaceView.Renderer
     
    public void onSurfaceChanged(GL10 glUnused, int width, int height) 
       {
-      mObject.abortEffects(EffectTypes.MATRIX);
-      mObject.abortEffects(EffectTypes.VERTEX);
-      mObject.abortEffects(EffectTypes.FRAGMENT);
+      mObject.abortAllEffects();
 
-      float factor = 0.8f*(width<height? width:height)/mObjWidth;
+      float factor = ( (float)(width<height? width:height) )/(mObjHeight + 1.4f*mObjWidth);
 
-      mObject.move( new Static3D( (width-factor*mObjWidth)/2 + width/8 , (height-factor*mObjHeight)/2 -height/4 , 0) );
+      mObject.move( new Static3D( factor*mObjHeight*0.58f , factor*mObjHeight*0.08f , 0) );
       mObject.scale(factor);
 
       Static1D angle = new Static1D(-45);
