commit e2d8ea1d78b60a53e4afbdae1ed2b6710e5ca347
Author: Leszek Koltunski <leszek@distorted.org>
Date:   Thu Jun 23 00:24:06 2016 +0100

    Progress with Vertex3D

diff --git a/src/main/java/org/distorted/examples/quaternion/QuaternionRenderer.java b/src/main/java/org/distorted/examples/quaternion/QuaternionRenderer.java
index 03859f8..1316ff3 100644
--- a/src/main/java/org/distorted/examples/quaternion/QuaternionRenderer.java
+++ b/src/main/java/org/distorted/examples/quaternion/QuaternionRenderer.java
@@ -99,15 +99,13 @@ class QuaternionRenderer implements GLSurfaceView.Renderer
 
     if( width > height )
       {
-      float factor = height/(3.0f*SIZE);
       mCube.move( new Static3D((width-height)/2,0,0) );
-      mCube.scale(factor);
+      mCube.scale(height/(3.0f*SIZE));
       }  
     else
       {
-      float factor = width/(3.0f*SIZE);
       mCube.move( new Static3D(0,(height-width)/2,0) );
-      mCube.scale(factor);
+      mCube.scale(width/(3.0f*SIZE));
       }
      
     mCube.quaternion( mRot, new Static3D(3*SIZE/2,3*SIZE/2,0) );
diff --git a/src/main/java/org/distorted/examples/vertex3d/Vertex3DActivity.java b/src/main/java/org/distorted/examples/vertex3d/Vertex3DActivity.java
index c27276e..cbc6feb 100644
--- a/src/main/java/org/distorted/examples/vertex3d/Vertex3DActivity.java
+++ b/src/main/java/org/distorted/examples/vertex3d/Vertex3DActivity.java
@@ -38,17 +38,17 @@ public class Vertex3DActivity extends Activity implements OnSeekBarChangeListene
 {
     private SeekBar bar;
     private TextView textDeform, textDistort, textSink, textSwirl;
-    private int moveX, moveY, moveZ;
-    private int scaleX, scaleY, scaleZ;
-    private int rotateX, rotateY, rotateZ, rotateA;
-    private int shearX, shearY, shearZ;
+    private int deformX, deformY, deformZ;
+    private int distortX, distortY, distortZ;
+    private int sinkA;
+    private int swirlA;
     
     private int maxX, maxY, maxZ;
     
-    private float fmoveX, fmoveY, fmoveZ;
-    private float fscaleX, fscaleY, fscaleZ;
-    private float frotateX, frotateY, frotateZ, frotateA;
-    private float fshearX, fshearY, fshearZ;
+    private float fdeformX, fdeformY, fdeformZ;
+    private float fdistortX, fdistortY, fdistortZ;
+    private float fsinkA;
+    private float fswirlA;
     
     private EffectNames[] effects = new EffectNames[4];
     
@@ -71,23 +71,17 @@ public class Vertex3DActivity extends Activity implements OnSeekBarChangeListene
       effects[2] = EffectNames.SINK;
       effects[3] = EffectNames.SWIRL;
     
-      moveX = 50;
-      moveY = 50;
-      moveZ = 50;
-      
-      scaleX = 50;
-      scaleY = 50;
-      scaleZ = 50;
-      
-      rotateX = 100;
-      rotateY =  50;
-      rotateZ =  50;
-      rotateA =  50;
-      
-      shearX = 50;
-      shearY = 50;
-      shearZ = 50;
-      
+      deformX = 50;
+      deformY = 50;
+      deformZ = 50;
+
+      distortX = 50;
+      distortY = 50;
+      distortZ = 50;
+
+      sinkA =  50;
+      swirlA = 50;
+
       addViews();
       }
     
@@ -125,22 +119,18 @@ public class Vertex3DActivity extends Activity implements OnSeekBarChangeListene
       setSinkText();
       setSwirlText();
       
-      setBar(R.id.vertex3ddeformBar1, moveX);
-      setBar(R.id.vertex3ddeformBar2, moveY);
-      setBar(R.id.vertex3ddeformBar3, moveZ);
-      
-      setBar(R.id.vertex3ddistortBar1, scaleX);
-      setBar(R.id.vertex3ddistortBar2, scaleY);
-      setBar(R.id.vertex3ddistortBar3, scaleZ);
-      
-      setBar(R.id.vertex3dsinkBar1, rotateX);
-      setBar(R.id.vertex3dsinkBar2, rotateY);
-      setBar(R.id.vertex3dsinkBar3, rotateZ);
+      setBar(R.id.vertex3ddeformBar1, deformX);
+      setBar(R.id.vertex3ddeformBar2, deformY);
+      setBar(R.id.vertex3ddeformBar3, deformZ);
 
-      setBar(R.id.vertex3dswirlBar1, shearX);
-      setBar(R.id.vertex3dswirlBar2, shearY);
-      setBar(R.id.vertex3dswirlBar3, shearZ);
+      setBar(R.id.vertex3ddistortBar1, distortX);
+      setBar(R.id.vertex3ddistortBar2, distortY);
+      setBar(R.id.vertex3ddistortBar3, distortZ);
       
+      setBar(R.id.vertex3dsinkBar1, sinkA);
+
+      setBar(R.id.vertex3dswirlBar1, swirlA);
+
       Vertex3DRenderer.setOrder(effects);
       }
 
@@ -217,90 +207,80 @@ public class Vertex3DActivity extends Activity implements OnSeekBarChangeListene
 
     private void computeDeform()
       {
-      fmoveX = (moveX-50)*maxX/50.0f;
-      fmoveY = (moveY-50)*maxY/50.0f;
-      fmoveZ = (moveZ-50)*maxZ/50.0f;
+      fdeformX = (deformX-50)*maxX/50.0f;
+      fdeformY = (deformY-50)*maxY/50.0f;
+      fdeformZ = (deformZ-50)*maxZ/50.0f;
 
-      Vertex3DRenderer.setDeform( fmoveX, fmoveY, fmoveZ);
+      Vertex3DRenderer.setDeform( fdeformX, fdeformY, fdeformZ );
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     private void setDeformText()
       {
-      fmoveX = ((int)(100*fmoveX))/100.0f;
-      fmoveY = ((int)(100*fmoveY))/100.0f;
-      fmoveZ = ((int)(100*fmoveZ))/100.0f;
+      fdeformX = ((int)(100*fdeformX))/100.0f;
+      fdeformY = ((int)(100*fdeformY))/100.0f;
+      fdeformZ = ((int)(100*fdeformZ))/100.0f;
 
-      textDeform.setText("deform("+fmoveX+" , "+fmoveY+" , "+fmoveZ+")");
+      textDeform.setText("deform("+fdeformX+" , "+fdeformY+" , "+fdeformZ+")");
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     private void computeDistort()
       {
-      fscaleX = (scaleX>50 ? 0.18f : 0.018f)*(scaleX-50)+1;
-      fscaleY = (scaleY>50 ? 0.18f : 0.018f)*(scaleY-50)+1;
-      fscaleZ = (scaleZ>50 ? 0.18f : 0.018f)*(scaleZ-50)+1;
+      fdistortX = (distortX-50)*maxX/50.0f;
+      fdistortY = (distortY-50)*maxY/50.0f;
+      fdistortZ = (distortZ-50)*maxZ/50.0f;
 
-      Vertex3DRenderer.setDistort(fscaleX, fscaleY, fscaleZ);
+      Vertex3DRenderer.setDistort(fdistortX, fdistortY, fdistortZ);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     private void setDistortText()
       {
-      fscaleX = ((int)(100*fscaleX))/100.0f;
-      fscaleY = ((int)(100*fscaleY))/100.0f;
-      fscaleZ = ((int)(100*fscaleZ))/100.0f;
+      fdistortX = ((int)(100*fdistortX))/100.0f;
+      fdistortY = ((int)(100*fdistortY))/100.0f;
+      fdistortZ = ((int)(100*fdistortZ))/100.0f;
 
-      textDistort.setText("distort("+fscaleX+" , "+fscaleY+" , "+fscaleZ+")");
+      textDistort.setText("distort("+fdistortX+" , "+fdistortY+" , "+fdistortZ+")");
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     private void computeSink()
       {
-      frotateX = (rotateX-50)/50.0f;
-      frotateY = (rotateY-50)/50.0f;
-      frotateZ = (rotateZ-50)/50.0f;
+      fsinkA = (sinkA>= 50 ? sinkA-49 : 1/(51-sinkA));
 
-      Vertex3DRenderer.setSink( frotateA, frotateX, frotateY, frotateZ );
+      Vertex3DRenderer.setSink( fsinkA );
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     private void setSinkText()
       {
-      frotateX = ((int)(100*frotateX))/100.0f;
-      frotateY = ((int)(100*frotateY))/100.0f;
-      frotateZ = ((int)(100*frotateZ))/100.0f;
-
-      frotateA = ((rotateA-50)*180)/50;
+      fsinkA = ((int)(100*fsinkA))/100.0f;
 
-      textSink.setText("sink( "+frotateA+" ("+frotateX+","+frotateY+","+frotateZ+") )");
+      textSink.setText("sink("+fsinkA+")");
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     private void computeSwirl()
       {
-      fshearX = (shearX-50)/25.0f;
-      fshearY = (shearY-50)/25.0f;
-      fshearZ = (shearZ-50)/25.0f;
+      fswirlA = (swirlA-50)*3.6f;
 
-      Vertex3DRenderer.setSwirl( fshearX, fshearY, fshearZ );
+      Vertex3DRenderer.setSwirl( fswirlA );
       }
     
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     private void setSwirlText()
       {
-      fshearX = ((int)(100*fshearX))/100.0f;
-      fshearY = ((int)(100*fshearY))/100.0f;
-      fshearZ = ((int)(100*fshearZ))/100.0f;
-      
-      textSwirl.setText("swirl("+fshearX+" , "+fshearY+" , "+fshearZ+")");
+      fswirlA = ((int)(100*fswirlA))/100.0f;
+
+      textSwirl.setText("swirl("+fswirlA+")");
       }
    
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -352,21 +332,17 @@ public class Vertex3DActivity extends Activity implements OnSeekBarChangeListene
       {
       switch (bar.getId()) 
         {
-        case R.id.vertex3ddeformBar1  : moveX = progress; computeDeform()  ; setDeformText()  ; break;
-        case R.id.vertex3ddeformBar2  : moveY = progress; computeDeform()  ; setDeformText()  ; break;
-        case R.id.vertex3ddeformBar3  : moveZ = progress; computeDeform()  ; setDeformText()  ; break;
-        
-        case R.id.vertex3ddistortBar1 : scaleX= progress; computeDistort() ; setDistortText() ; break;
-        case R.id.vertex3ddistortBar2 : scaleY= progress; computeDistort() ; setDistortText() ; break;
-        case R.id.vertex3ddistortBar3 : scaleZ= progress; computeDistort() ; setDistortText() ; break;
+        case R.id.vertex3ddeformBar1  : deformX= progress; computeDeform()  ; setDeformText()  ; break;
+        case R.id.vertex3ddeformBar2  : deformY= progress; computeDeform()  ; setDeformText()  ; break;
+        case R.id.vertex3ddeformBar3  : deformZ= progress; computeDeform()  ; setDeformText()  ; break;
+
+        case R.id.vertex3ddistortBar1 : distortX= progress; computeDistort(); setDistortText() ; break;
+        case R.id.vertex3ddistortBar2 : distortY= progress; computeDistort(); setDistortText() ; break;
+        case R.id.vertex3ddistortBar3 : distortZ= progress; computeDistort(); setDistortText() ; break;
         
-        case R.id.vertex3dsinkBar1    : rotateX=progress; computeSink()    ; setSinkText()    ; break;
-        case R.id.vertex3dsinkBar2    : rotateY=progress; computeSink()    ; setSinkText()    ; break;
-        case R.id.vertex3dsinkBar3    : rotateZ=progress; computeSink()    ; setSinkText()    ; break;
+        case R.id.vertex3dsinkBar1    : sinkA   = progress; computeSink()   ; setSinkText()    ; break;
 
-        case R.id.vertex3dswirlBar1   : shearX= progress; computeSwirl()   ; setSwirlText()   ; break;
-        case R.id.vertex3dswirlBar2   : shearY= progress; computeSwirl()   ; setSwirlText()   ; break;
-        case R.id.vertex3dswirlBar3   : shearZ= progress; computeSwirl()   ; setSwirlText()   ; break;
+        case R.id.vertex3dswirlBar1   : swirlA  = progress; computeSwirl()  ; setSwirlText()   ; break;
         }
       }
 
diff --git a/src/main/java/org/distorted/examples/vertex3d/Vertex3DRenderer.java b/src/main/java/org/distorted/examples/vertex3d/Vertex3DRenderer.java
index 0dca6e1..c4a66c9 100644
--- a/src/main/java/org/distorted/examples/vertex3d/Vertex3DRenderer.java
+++ b/src/main/java/org/distorted/examples/vertex3d/Vertex3DRenderer.java
@@ -29,8 +29,11 @@ import org.distorted.library.Distorted;
 import org.distorted.library.DistortedCubes;
 import org.distorted.library.EffectNames;
 import org.distorted.library.EffectTypes;
+import org.distorted.library.type.Dynamic1D;
 import org.distorted.library.type.Dynamic3D;
 import org.distorted.library.type.Dynamic4D;
+import org.distorted.library.type.Static1D;
+import org.distorted.library.type.Static2D;
 import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
 
@@ -45,44 +48,46 @@ import javax.microedition.khronos.opengles.GL10;
 class Vertex3DRenderer implements GLSurfaceView.Renderer
 {
     private static final int SIZE = 100;
-	
+	  private static final int NUM  =   3;
+
     private GLSurfaceView mView;
     private static DistortedCubes mCube;
 
     private static EffectNames[] order;
     
-    private static Dynamic3D mMoveInter, mScaleInter, mShearInter;
-    private static Dynamic4D mDynamicRotate;
+    private static Dynamic3D mDeformInter, mDistortInter;
+    private static Dynamic1D mSinkInter, mSwirlInter;
 
-    private static Static3D mZeroPoint, mMovePoint, mScalePoint, mShearPoint;
-    private static Static4D mRotatePoint;
+    private static Static2D mCenterPoint;
+    private static Static3D mDeformPoint, mDistortPoint;
+    private static Static1D mSinkPoint, mSwirlPoint;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public static void setDeform(float x, float y, float z)
       {
-      mMovePoint.set(x, y, z);
+      mDeformPoint.set(x, y, z);
       }
     
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public static void setDistort(float x, float y, float z)
       {
-      mScalePoint.set(x, y, z);
+      mDistortPoint.set(x, y, z);
       }
      
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    public static void setSink(float a, float x, float y, float z)
+    public static void setSink(float s)
       {
-      mRotatePoint.set(a,x,y,z);
+      mSinkPoint.set(s);
       }
     
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    public static void setSwirl(float x, float y, float z)
+    public static void setSwirl(float s)
       {
-      mShearPoint.set(x, y, z);
+      mSwirlPoint.set(s);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -90,23 +95,23 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
     public static void setOrder(EffectNames[] effects)
       {
       order = effects;
-      setMatrixEffects();
+      setVertexEffects();
       }
       
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    public static void setMatrixEffects()
+    public static void setVertexEffects()
       {
-      mCube.abortEffects(EffectTypes.MATRIX);
+      mCube.abortEffects(EffectTypes.VERTEX);
 	
       for( int i=0; i<=order.length-1 ; i++ )
         {
         switch(order[i])
           {
-          case MOVE  : mCube.move(mMoveInter)                 ; break;
-          case SCALE : mCube.scale(mScaleInter)               ; break;
-          case ROTATE: mCube.rotate(mDynamicRotate,mZeroPoint); break;
-          case SHEAR : mCube.shear(mShearInter, mZeroPoint)   ; break;
+          case DEFORM : mCube.deform( mDeformInter , mCenterPoint) ; break;
+          case DISTORT: mCube.distort(mDistortInter, mCenterPoint) ; break;
+          case SINK   : mCube.sink(   mSinkInter   , mCenterPoint) ; break;
+          case SWIRL  : mCube.swirl(  mSwirlInter  , mCenterPoint) ; break;
           }
         }
       }
@@ -116,23 +121,23 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
     public Vertex3DRenderer(GLSurfaceView v)
       {
       mView = v;
-      mCube = new DistortedCubes( 1, "1", SIZE);
+      mCube = new DistortedCubes( NUM, "111101111", SIZE);
       
-      mZeroPoint   = new Static3D(0,0,0);
-      mMovePoint   = new Static3D(0,0,0);
-      mScalePoint  = new Static3D(1,1,1);
-      mShearPoint  = new Static3D(0,0,0);
-      mRotatePoint = new Static4D(0,1,0,0);
-
-      mMoveInter    = new Dynamic3D();
-      mScaleInter   = new Dynamic3D();
-      mShearInter   = new Dynamic3D();
-      mDynamicRotate= new Dynamic4D();
-
-      mMoveInter.add(mMovePoint);
-      mScaleInter.add(mScalePoint);
-      mShearInter.add(mShearPoint);
-      mDynamicRotate.add(mRotatePoint);
+      mCenterPoint = new Static2D(0,0);
+      mDeformPoint = new Static3D(0,0,0);
+      mDistortPoint= new Static3D(1,1,1);
+      mSwirlPoint  = new Static1D(0);
+      mSinkPoint   = new Static1D(1);
+
+      mDeformInter  = new Dynamic3D();
+      mDistortInter = new Dynamic3D();
+      mSwirlInter   = new Dynamic1D();
+      mSinkInter    = new Dynamic1D();
+
+      mDeformInter.add(mDeformPoint);
+      mDistortInter.add(mDistortPoint);
+      mSwirlInter.add(mSwirlPoint);
+      mSinkInter.add(mSinkPoint);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -149,7 +154,12 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
     
     public void onSurfaceChanged(GL10 glUnused, int width, int height) 
       {
-      setMatrixEffects();
+      mCube.abortEffects(EffectTypes.MATRIX);
+      float factor = (width>height ? height:width)/((NUM+2)*SIZE);
+      mCube.scale(factor);
+      mCube.move( new Static3D( (width-factor*NUM*SIZE)/2,(height-factor*NUM*SIZE)/2,0) );
+
+      setVertexEffects();
 
       Distorted.onSurfaceChanged(width, height); 
       }
diff --git a/src/main/res/layout/vertex3ddeform.xml b/src/main/res/layout/vertex3ddeform.xml
index f672056..3983ea9 100644
--- a/src/main/res/layout/vertex3ddeform.xml
+++ b/src/main/res/layout/vertex3ddeform.xml
@@ -20,14 +20,6 @@
                         android:layout_marginTop="3dp"
                         android:textAppearance="?android:attr/textAppearanceLarge" />
 
-                    <SeekBar
-                        android:id="@+id/vertex3ddeformBar4"
-                        android:layout_width="fill_parent"
-                        android:layout_height="wrap_content"
-                        android:layout_marginEnd="5dp"
-                        android:layout_marginLeft="5dp"
-                        android:layout_marginRight="5dp" />
-
                     <SeekBar
                         android:id="@+id/vertex3ddeformBar1"
                         android:layout_width="fill_parent"
diff --git a/src/main/res/layout/vertex3dsink.xml b/src/main/res/layout/vertex3dsink.xml
index 02210ea..e78d6bd 100644
--- a/src/main/res/layout/vertex3dsink.xml
+++ b/src/main/res/layout/vertex3dsink.xml
@@ -30,24 +30,6 @@
                         android:layout_marginLeft="5dp"
                         android:layout_marginRight="5dp" />
 
-                    <SeekBar
-                        android:id="@+id/vertex3dsinkBar2"
-                        android:layout_width="fill_parent"
-                        android:layout_height="wrap_content"
-                        android:layout_gravity="end"
-                        android:layout_marginEnd="5dp"
-                        android:layout_marginLeft="5dp"
-                        android:layout_marginRight="5dp" />
-
-                    <SeekBar
-                        android:id="@+id/vertex3dsinkBar3"
-                        android:layout_width="fill_parent"
-                        android:layout_height="wrap_content"
-                        android:layout_gravity="end"
-                        android:layout_marginEnd="5dp"
-                        android:layout_marginLeft="5dp"
-                        android:layout_marginRight="5dp" />
-
                 </LinearLayout>
 
                 <Button
diff --git a/src/main/res/layout/vertex3dswirl.xml b/src/main/res/layout/vertex3dswirl.xml
index 6fecb82..b8e74aa 100644
--- a/src/main/res/layout/vertex3dswirl.xml
+++ b/src/main/res/layout/vertex3dswirl.xml
@@ -29,24 +29,6 @@
                         android:layout_marginLeft="5dp"
                         android:layout_marginRight="5dp" />
 
-                    <SeekBar
-                        android:id="@+id/vertex3dswirlBar2"
-                        android:layout_width="fill_parent"
-                        android:layout_height="wrap_content"
-                        android:layout_gravity="end"
-                        android:layout_marginEnd="5dp"
-                        android:layout_marginLeft="5dp"
-                        android:layout_marginRight="5dp" />
-
-                    <SeekBar
-                        android:id="@+id/vertex3dswirlBar3"
-                        android:layout_width="fill_parent"
-                        android:layout_height="wrap_content"
-                        android:layout_gravity="end"
-                        android:layout_marginEnd="5dp"
-                        android:layout_marginLeft="5dp"
-                        android:layout_marginRight="5dp" />
-
                 </LinearLayout>
 
                 <Button
