commit 6f779cd4abe48df16c455e41024bf79a86389493
Author: Leszek Koltunski <leszek@distorted.org>
Date:   Sat Jul 9 00:23:16 2016 +0100

    beginnings of support for drawing the Region in Vertex3D app.

diff --git a/src/main/java/org/distorted/examples/fragment3d/Fragment3DActivity.java b/src/main/java/org/distorted/examples/fragment3d/Fragment3DActivity.java
index d446f47..fb628b1 100644
--- a/src/main/java/org/distorted/examples/fragment3d/Fragment3DActivity.java
+++ b/src/main/java/org/distorted/examples/fragment3d/Fragment3DActivity.java
@@ -362,7 +362,6 @@ public class Fragment3DActivity extends Activity
       case 8: mObject.saturation(dyn1,       regi, true ); break;
       case 9: mObject.contrast  (dyn1,       regi, false); break;
       case 10:mObject.contrast  (dyn1,       regi, true ); break;
-
       }
     }
 
diff --git a/src/main/java/org/distorted/examples/vertex3d/Vertex3DActivity.java b/src/main/java/org/distorted/examples/vertex3d/Vertex3DActivity.java
index f073784..d2f978d 100644
--- a/src/main/java/org/distorted/examples/vertex3d/Vertex3DActivity.java
+++ b/src/main/java/org/distorted/examples/vertex3d/Vertex3DActivity.java
@@ -70,6 +70,7 @@ public class Vertex3DActivity extends Activity
   private ArrayList<Vertex3DEffect> mEffects;
   private int mEffectAdd;
   private float mCenterX, mCenterY;
+  private float mRegionX, mRegionY, mRegionR;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -201,6 +202,19 @@ public class Vertex3DActivity extends Activity
     tmp.setBackgroundColor(mShape[id] ? COLOR_ON:COLOR_OFF);
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public void setRegion(float x, float y, float r)
+    {
+    mRegionX = x;
+    mRegionY = y;
+    mRegionR = r;
+
+    Vertex3DSurfaceView view = (Vertex3DSurfaceView)findViewById(R.id.vertex3dSurfaceView);
+
+    view.getRenderer().setRegion(mRegionX, mRegionY, mRegionR);
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public void setCenter(float x, float y)
@@ -227,6 +241,27 @@ public class Vertex3DActivity extends Activity
     return mCenterY;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public float getRegionX()
+    {
+    return mRegionX;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public float getRegionY()
+    {
+    return mRegionY;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public float getRegionR()
+    {
+    return mRegionR;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public void Continue(View v)
@@ -312,12 +347,22 @@ public class Vertex3DActivity extends Activity
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
-// 'second screen' methods
 
-  private void setVertexView()
+  private void resetData()
     {
     mCenterX = 0.5f*getWidth();
     mCenterY = 0.5f*getHeight();
+    mRegionX = 0;
+    mRegionY = 0;
+    mRegionR = getWidth()/2;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// 'second screen' methods
+
+  private void setVertexView()
+    {
+    resetData();
 
     final View view = getLayoutInflater().inflate(R.layout.vertex3dlayout, null);
 
@@ -392,13 +437,13 @@ public class Vertex3DActivity extends Activity
     layout.removeAllViews();
     mObject.abortEffects(EffectTypes.VERTEX);
 
-    mCenterX = 0.5f*getWidth();
-    mCenterY = 0.5f*getHeight();
+    resetData();
 
     Vertex3DSurfaceView view = (Vertex3DSurfaceView)findViewById(R.id.vertex3dSurfaceView);
     Vertex3DRenderer renderer= view.getRenderer();
 
     renderer.setCenter( mCenterX, mCenterY );
+    renderer.setRegion( mRegionX, mRegionY, mRegionR );
     renderer.mQuat1.set(0,0,0,1);
     renderer.mQuat2.set(0,0,0,1);
     }
diff --git a/src/main/java/org/distorted/examples/vertex3d/Vertex3DEffect.java b/src/main/java/org/distorted/examples/vertex3d/Vertex3DEffect.java
index 984129c..c0dd156 100644
--- a/src/main/java/org/distorted/examples/vertex3d/Vertex3DEffect.java
+++ b/src/main/java/org/distorted/examples/vertex3d/Vertex3DEffect.java
@@ -70,8 +70,6 @@ public class Vertex3DEffect implements SeekBar.OnSeekBarChangeListener
     float x = (mInterCenter[0]*0.012f - 0.1f)*act.getWidth();
     float y = (mInterCenter[1]*0.012f - 0.1f)*act.getHeight();
     mCenterSta.set(x,y);
-
-    act.setCenter(x,y);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -452,7 +450,10 @@ public class Vertex3DEffect implements SeekBar.OnSeekBarChangeListener
       setCenterText();
       }
 
-    mAct.get().setCenter(mCenterSta.getX(),mCenterSta.getY());
+    Vertex3DActivity act = mAct.get();
+
+    act.setCenter(mCenterSta.getX(),mCenterSta.getY());
+    act.setRegion(mRegionSta.getX(),mRegionSta.getY(), mRegionSta.getZ());
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/examples/vertex3d/Vertex3DRenderer.java b/src/main/java/org/distorted/examples/vertex3d/Vertex3DRenderer.java
index 9989bb0..2e92987 100644
--- a/src/main/java/org/distorted/examples/vertex3d/Vertex3DRenderer.java
+++ b/src/main/java/org/distorted/examples/vertex3d/Vertex3DRenderer.java
@@ -48,17 +48,20 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
     private DistortedObject mObject;
     private DistortedBitmap mBackground;
     private DistortedBitmap mCenter;
+    private DistortedBitmap mRegion;
     private int mObjWidth, mObjHeight;
     private DynamicQuat mQuatInt1, mQuatInt2;
 
     private Dynamic3D mMoveInter;
     private Static3D mMovePoint;
-    private float mFactorObj;
+    private Dynamic3D mRegionScaleInter;
+    private Static3D mRegionScalePoint;
+
+    private float mFactorObj, mFactorReg;
 
     Static4D mQuat1, mQuat2;
     int mScreenMin;
 
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public Vertex3DRenderer(GLSurfaceView v)
@@ -68,6 +71,7 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
       mObject     = ((Vertex3DActivity)v.getContext()).getObject();
       mBackground = new DistortedBitmap(100, 100, 1);
       mCenter     = new DistortedBitmap(100, 100, 1);
+      mRegion     = new DistortedBitmap(100, 100, 1);
 
       mObjWidth = mObject.getWidth();
       mObjHeight= mObject.getHeight();
@@ -81,9 +85,13 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
       mQuatInt1.add(mQuat1);
       mQuatInt2.add(mQuat2);
 
-      mMovePoint= new Static3D(0,0,0);
       mMoveInter= new Dynamic3D();
+      mMovePoint= new Static3D(0,0,0);
       mMoveInter.add(mMovePoint);
+
+      mRegionScaleInter = new Dynamic3D();
+      mRegionScalePoint = new Static3D(0,0,0);
+      mRegionScaleInter.add(mRegionScalePoint);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -93,6 +101,14 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
       mMovePoint.set(mFactorObj*x,mFactorObj*y,0);
       }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public void setRegion(float x, float y, float r)
+      {
+      float f = mFactorReg*r;
+      mRegionScalePoint.set(f,f,f);
+      }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public void onDrawFrame(GL10 glUnused)
@@ -105,6 +121,7 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
       mBackground.draw(time);
       mObject.draw(time);
       mCenter.draw(time);
+      mRegion.draw(time);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -116,9 +133,13 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
       mObject.abortEffects(EffectTypes.MATRIX);
       mBackground.abortEffects(EffectTypes.MATRIX);
       mCenter.abortEffects(EffectTypes.MATRIX);
+      mRegion.abortEffects(EffectTypes.MATRIX);
 
       float factorCen;
       int centerSize = mCenter.getWidth();
+      int regionSize = mRegion.getWidth();
+
+      mFactorReg = (0.5f*width)/regionSize;
 
       if( width*mObjHeight > height*mObjWidth ) // screen is more 'horizontal' than the Object
         {
@@ -133,6 +154,8 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
 
       Vertex3DActivity act = (Vertex3DActivity)mView.getContext();
       mMovePoint.set(mFactorObj*act.getCenterX(),mFactorObj*act.getCenterY(),0);
+      float f = mFactorReg*act.getRegionR();
+      mRegionScalePoint.set(f,f,f);
 
       Static3D rotateObj = new Static3D(mObjWidth/2,mObjHeight/2, 0);
 
@@ -151,6 +174,14 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
       mCenter.move(mMoveInter);
       mCenter.scale(factorCen);
 
+      mRegion.quaternion(mQuatInt1, rotateCen);
+      mRegion.quaternion(mQuatInt2, rotateCen);
+
+      mRegion.move( new Static3D( (width -mFactorReg*regionSize-mFactorObj*mObjWidth )/2 ,
+                                  (height-mFactorReg*regionSize-mFactorObj*mObjHeight)/2 , 12) );
+      mRegion.move(mMoveInter);
+      mRegion.scale(mRegionScaleInter);
+
       int backgroundSize = mBackground.getWidth();
       float factorBackX = ((float)width)/backgroundSize;
       float factorBackY = ((float)height)/backgroundSize;
@@ -170,14 +201,16 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
       InputStream is1 = act.getResources().openRawResource(act.getBitmap());
       InputStream is2 = act.getResources().openRawResource(R.raw.water);
       InputStream is3 = act.getResources().openRawResource(R.raw.center);
+      InputStream is4 = act.getResources().openRawResource(R.raw.region);
 
-      Bitmap bitmap1,bitmap2,bitmap3;
+      Bitmap bitmap1,bitmap2,bitmap3,bitmap4;
         
       try 
         {
         bitmap1 = BitmapFactory.decodeStream(is1);
         bitmap2 = BitmapFactory.decodeStream(is2);
         bitmap3 = BitmapFactory.decodeStream(is3);
+        bitmap4 = BitmapFactory.decodeStream(is4);
         }
       finally 
         {
@@ -186,6 +219,7 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
           is1.close();
           is2.close();
           is3.close();
+          is4.close();
           } 
         catch(IOException e) { }
         }  
@@ -193,6 +227,7 @@ class Vertex3DRenderer implements GLSurfaceView.Renderer
       mObject.setBitmap(bitmap1);
       mBackground.setBitmap(bitmap2);
       mCenter.setBitmap(bitmap3);
+      mRegion.setBitmap(bitmap4);
 
       try
         {
