commit d2337a3ab4cadbc93d6cca57706a6040009192a0
Author: Leszek Koltunski <leszek@distoretedandroid.org>
Date:   Mon Jun 27 13:00:01 2016 +0100

    Progress with Vertex3D

diff --git a/src/main/java/org/distorted/examples/vertex3d/Vertex3DActivity.java b/src/main/java/org/distorted/examples/vertex3d/Vertex3DActivity.java
index 2603861..9335b42 100644
--- a/src/main/java/org/distorted/examples/vertex3d/Vertex3DActivity.java
+++ b/src/main/java/org/distorted/examples/vertex3d/Vertex3DActivity.java
@@ -221,10 +221,11 @@ public class Vertex3DActivity extends Activity implements OnSeekBarChangeListene
     sinkA =  50;
     swirlA = 50;
 
-    centerX = 25;
-    centerY = 25;
+    centerX = 50;
+    centerY = 50;
 
     textCenter = (TextView)findViewById(R.id.vertex3dcenterText);
+    computeCenter();
     setCenterText();
 
     setBar(R.id.vertex3dcenterX, centerX);
@@ -279,7 +280,8 @@ public class Vertex3DActivity extends Activity implements OnSeekBarChangeListene
 
     setBar(R.id.vertex3dswirlBar1, swirlA);
 
-    Vertex3DRenderer.setOrder(effects);
+    Vertex3DSurfaceView view = (Vertex3DSurfaceView)findViewById(R.id.vertex3dSurfaceView);
+    view.getRenderer().setOrder(effects);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -355,11 +357,14 @@ public class Vertex3DActivity extends Activity implements OnSeekBarChangeListene
 
   private void computeDeform()
     {
-    fdeformX = (deformX-50)*Vertex3DRenderer.mScreenMin/50.0f;
-    fdeformY = (deformY-50)*Vertex3DRenderer.mScreenMin/50.0f;
-    fdeformZ = (deformZ-50)*Vertex3DRenderer.mScreenMin/50.0f;
+    Vertex3DSurfaceView view = (Vertex3DSurfaceView)findViewById(R.id.vertex3dSurfaceView);
+    Vertex3DRenderer renderer = view.getRenderer();
 
-    Vertex3DRenderer.setDeform( fdeformX, fdeformY, fdeformZ );
+    fdeformX = (deformX-50)*renderer.mScreenMin/200.0f;
+    fdeformY = (deformY-50)*renderer.mScreenMin/200.0f;
+    fdeformZ = (deformZ-50)*renderer.mScreenMin/200.0f;
+
+    renderer.setDeform( fdeformX, fdeformY, fdeformZ );
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -377,11 +382,14 @@ public class Vertex3DActivity extends Activity implements OnSeekBarChangeListene
 
   private void computeDistort()
     {
-    fdistortX = (distortX-50)*Vertex3DRenderer.mScreenMin/50.0f;
-    fdistortY = (distortY-50)*Vertex3DRenderer.mScreenMin/50.0f;
-    fdistortZ = (distortZ-50)*Vertex3DRenderer.mScreenMin/50.0f;
+    Vertex3DSurfaceView view = (Vertex3DSurfaceView)findViewById(R.id.vertex3dSurfaceView);
+    Vertex3DRenderer renderer = view.getRenderer();
+
+    fdistortX = (distortX-50)*renderer.mScreenMin/200.0f;
+    fdistortY = (distortY-50)*renderer.mScreenMin/200.0f;
+    fdistortZ = (distortZ-50)*renderer.mScreenMin/200.0f;
 
-    Vertex3DRenderer.setDistort(fdistortX, fdistortY, fdistortZ);
+    renderer.setDistort(fdistortX, fdistortY, fdistortZ);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -399,9 +407,11 @@ public class Vertex3DActivity extends Activity implements OnSeekBarChangeListene
 
   private void computeSink()
     {
+    Vertex3DSurfaceView view = (Vertex3DSurfaceView)findViewById(R.id.vertex3dSurfaceView);
+
     fsinkA = (sinkA>= 50 ? 0.18f*sinkA-8.0f : 0.018f*sinkA + 0.1f);
 
-    Vertex3DRenderer.setSink( fsinkA );
+    view.getRenderer().setSink( fsinkA );
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -417,9 +427,11 @@ public class Vertex3DActivity extends Activity implements OnSeekBarChangeListene
 
   private void computeSwirl()
     {
+    Vertex3DSurfaceView view = (Vertex3DSurfaceView)findViewById(R.id.vertex3dSurfaceView);
+
     fswirlA = (swirlA-50)*3.6f;
 
-    Vertex3DRenderer.setSwirl( fswirlA );
+    view.getRenderer().setSwirl( fswirlA );
     }
     
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -435,10 +447,12 @@ public class Vertex3DActivity extends Activity implements OnSeekBarChangeListene
 
   private void computeCenter()
     {
-    fcenterX = (centerX*0.02f - 0.5f)*Vertex3DRenderer.SIZE;
-    fcenterY = (centerY*0.02f - 0.5f)*Vertex3DRenderer.SIZE;
+    Vertex3DSurfaceView view = (Vertex3DSurfaceView)findViewById(R.id.vertex3dSurfaceView);
 
-    Vertex3DRenderer.setCenter( fcenterX, fcenterY );
+    fcenterX = centerX;
+    fcenterY = centerY;
+
+    view.getRenderer().setCenter( fcenterX, fcenterY );
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -451,6 +465,20 @@ public class Vertex3DActivity extends Activity implements OnSeekBarChangeListene
     textCenter.setText("center("+fcenterX+","+fcenterY+")");
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public float getCenterX()
+    {
+    return fcenterX;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public float getCenterY()
+    {
+    return fcenterY;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // Overrides
 
diff --git a/src/main/java/org/distorted/examples/vertex3d/Vertex3DRenderer.java b/src/main/java/org/distorted/examples/vertex3d/Vertex3DRenderer.java
index 9bf7485..2470e1b 100644
--- a/src/main/java/org/distorted/examples/vertex3d/Vertex3DRenderer.java
+++ b/src/main/java/org/distorted/examples/vertex3d/Vertex3DRenderer.java
@@ -50,69 +50,72 @@ import javax.microedition.khronos.opengles.GL10;
 
 class Vertex3DRenderer implements GLSurfaceView.Renderer
 {
-    public static final int SIZE = 100;
+    private static final int SIZE = 100;
 
     private GLSurfaceView mView;
-    private static DistortedObject mObject;
+    private DistortedObject mObject;
     private DistortedBitmap mCenter;
-    private int mCols;
+    private float mFactorCen, mFactorObj;
 
     private int mObjWidth, mObjHeight;
 
     private DynamicQuat mQuatInt1, mQuatInt2;
 
-    private static EffectNames[] order;
+    private EffectNames[] order;
 
-    private static Dynamic2D mCenterInter;
-    private static Dynamic3D mDeformInter, mDistortInter, mMoveInter;
-    private static Dynamic1D mSinkInter, mSwirlInter;
+    private Dynamic2D mCenterInter;
+    private Dynamic3D mDeformInter, mDistortInter, mMoveInter;
+    private Dynamic1D mSinkInter, mSwirlInter;
 
-    private static Static2D mCenterPoint;
-    private static Static3D mDeformPoint, mDistortPoint, mMovePoint;
-    private static Static1D mSinkPoint, mSwirlPoint;
+    private Static2D mCenterPoint;
+    private Static3D mDeformPoint, mDistortPoint, mMovePoint;
+    private Static1D mSinkPoint, mSwirlPoint;
 
     Static4D mQuat1, mQuat2;
-    static int mScreenMin;
+    int mScreenMin;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    public static void setDeform(float x, float y, float z)
+    public void setDeform(float x, float y, float z)
       {
       mDeformPoint.set(x, y, z);
       }
     
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    public static void setDistort(float x, float y, float z)
+    public void setDistort(float x, float y, float z)
       {
       mDistortPoint.set(x, y, z);
       }
      
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    public static void setSink(float s)
+    public void setSink(float s)
       {
       mSinkPoint.set(s);
       }
     
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    public static void setSwirl(float s)
+    public void setSwirl(float s)
       {
       mSwirlPoint.set(s);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    public static void setCenter(float x, float y)
+    public void setCenter(float x, float y)
       {
+      x = (0.012f*x-0.1f)*mObjWidth;
+      y = (0.012f*y-0.1f)*mObjHeight;
+
       mCenterPoint.set(x,y);
-      mMovePoint.set(x,y,0);
+      mMovePoint.set(mFactorObj*x,mFactorObj*y,0);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    public static void setOrder(EffectNames[] effects)
+    public void setOrder(EffectNames[] effects)
       {
       order = effects;
       setVertexEffects();
@@ -120,7 +123,7 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
       
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    public static void setVertexEffects()
+    public void setVertexEffects()
       {
       mObject.abortEffects(EffectTypes.VERTEX);
 
@@ -142,9 +145,7 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
       {
       mView = v;
 
-      mCols = Vertex3DActivity.getCols();
-
-      mObject = new DistortedCubes( mCols, Vertex3DActivity.getShape(), SIZE);
+      mObject = new DistortedCubes( Vertex3DActivity.getCols(), Vertex3DActivity.getShape(), SIZE);
       //mObject = new DistortedBitmap( SIZE, SIZE, 10);
       mCenter = new DistortedBitmap(SIZE, SIZE, 1);
 
@@ -204,35 +205,43 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
       mObject.abortEffects(EffectTypes.MATRIX);
       mCenter.abortEffects(EffectTypes.MATRIX);
 
-      float factorObj;
+      int centerSize = mCenter.getWidth();
 
       if( width*mObjHeight > height*mObjWidth ) // screen is more 'horizontal' than the Object
         {
-        factorObj = (0.7f*height)/mObjHeight;
+        mFactorObj = (0.70f*height)/mObjHeight;
+        mFactorCen = (0.15f*height)/centerSize;
         }
       else
         {
-        factorObj = (0.7f*width)/mObjWidth;
+        mFactorObj = (0.70f*width)/mObjWidth;
+        mFactorCen = (0.15f*width)/centerSize;
         }
 
+      Vertex3DActivity act = (Vertex3DActivity)mView.getContext();
+      float cX = act.getCenterX();
+      float cY = act.getCenterY();
+
+      cX = (0.012f*cX-0.1f)*mObjWidth;
+      cY = (0.012f*cY-0.1f)*mObjHeight;
+
+      mMovePoint.set(cX*mFactorObj,cY*mFactorObj,0);
+
       Static3D rotateObj = new Static3D(mObjWidth/2,mObjHeight/2, 0);
 
-      mObject.move( new Static3D( (width-factorObj*mObjWidth)/2 , (height-factorObj*mObjHeight)/2 , 0) );
-      mObject.scale(factorObj);
+      mObject.move( new Static3D( (width-mFactorObj*mObjWidth)/2 , (height-mFactorObj*mObjHeight)/2 , 0) );
+      mObject.scale(mFactorObj);
       mObject.quaternion(mQuatInt1, rotateObj);
       mObject.quaternion(mQuatInt2, rotateObj);
 
-      int centerSize = mCenter.getWidth();
       Static3D rotateCen = new Static3D(width/2,height/2, 0);
 
-      float factorCen = (float)(mCols*SIZE) / (5*centerSize);  // make the 'center' bitmap 1/5 of the Object's width
-
       mCenter.quaternion(mQuatInt1, rotateCen);
       mCenter.quaternion(mQuatInt2, rotateCen);
-      mCenter.move( new Static3D( (width -factorCen*centerSize-factorObj*mObjWidth )/2 ,
-                                  (height-factorCen*centerSize-factorObj*mObjHeight)/2 , 10) );
+      mCenter.move( new Static3D( (width -mFactorCen*centerSize-mFactorObj*mObjWidth )/2 ,
+                                  (height-mFactorCen*centerSize-mFactorObj*mObjHeight)/2 , 10) );
       mCenter.move(mMoveInter);
-      mCenter.scale(factorCen);
+      mCenter.scale(mFactorCen);
 
       setVertexEffects();
 
diff --git a/src/main/java/org/distorted/examples/vertex3d/Vertex3DSurfaceView.java b/src/main/java/org/distorted/examples/vertex3d/Vertex3DSurfaceView.java
index 92f053a..a32bb00 100644
--- a/src/main/java/org/distorted/examples/vertex3d/Vertex3DSurfaceView.java
+++ b/src/main/java/org/distorted/examples/vertex3d/Vertex3DSurfaceView.java
@@ -53,6 +53,13 @@ class Vertex3DSurfaceView extends GLSurfaceView
       }
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public Vertex3DRenderer getRenderer()
+    {
+    return mRenderer;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   @Override
