commit 8a99c681d86ab9d5b0dbba7b11ac8b3313d47c41
Author: Leszek Koltunski <leszek@distoretedandroid.org>
Date:   Wed Apr 26 16:21:57 2017 +0100

    Make a MeshCubes object rendered with no effects have its front wall at the screen's surface (so that when we just replace MeshFlat with MeshCubes, it looks more similar)

diff --git a/src/main/java/org/distorted/examples/cubes/CubesRenderer.java b/src/main/java/org/distorted/examples/cubes/CubesRenderer.java
index 49a52b2..1ec6196 100644
--- a/src/main/java/org/distorted/examples/cubes/CubesRenderer.java
+++ b/src/main/java/org/distorted/examples/cubes/CubesRenderer.java
@@ -52,7 +52,7 @@ class CubesRenderer implements GLSurfaceView.Renderer
     private MeshObject mMesh;
     private DistortedScreen mScreen;
     private DynamicQuat mQuatInt1, mQuatInt2;
-    private int mObjWidth, mObjHeight;
+    private int mObjWidth, mObjHeight, mObjDepth;
 
     Static4D mQuat1, mQuat2;
     int mScreenMin;
@@ -71,6 +71,7 @@ class CubesRenderer implements GLSurfaceView.Renderer
 
       mObjWidth = mTexture.getWidth();
       mObjHeight= mTexture.getHeight();
+      mObjDepth = mTexture.getDepth(mMesh);
 
       mQuat1 = new Static4D(0,0,0,1);  // unity
       mQuat2 = new Static4D(0,0,0,1);  // quaternions
@@ -111,7 +112,7 @@ class CubesRenderer implements GLSurfaceView.Renderer
 
       mEffects.move( new Static3D( (width-factor*mObjWidth)/2 , (height-factor*mObjHeight)/2 , 0) );
       mEffects.scale(factor);
-      Static3D center = new Static3D( (float)mObjWidth/2, (float)mObjHeight/2, 0.0f );
+      Static3D center = new Static3D( (float)mObjWidth/2, (float)mObjHeight/2, -(float)mObjDepth/2 );
 
       mEffects.quaternion(mQuatInt1, center);
       mEffects.quaternion(mQuatInt2, center);
diff --git a/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java b/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java
index cc6bff7..6c9c32b 100644
--- a/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java
+++ b/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java
@@ -21,7 +21,6 @@ package org.distorted.examples.effects3d;
 
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
-import android.opengl.GLES30;
 import android.opengl.GLSurfaceView;
 
 import org.distorted.examples.R;
@@ -202,7 +201,7 @@ class Effects3DRenderer implements GLSurfaceView.Renderer
       mFactorReg = 2*mFactorObj*act.getRegionR()/regionSize;
       mRegionScalePoint.set(mFactorReg,mFactorReg,mFactorReg);
 
-      Static3D rotateObj = new Static3D(mObjWidth/2,mObjHeight/2, 0);
+      Static3D rotateObj = new Static3D( (float)mObjWidth/2, (float)mObjHeight/2, -(float)mObjDepth/2 );
 
       mObjectEffects.move( new Static3D( (width-mFactorObj*mObjWidth)/2 , (height-mFactorObj*mObjHeight)/2 , 0) );
       mObjectEffects.scale(mFactorObj);
@@ -215,7 +214,7 @@ class Effects3DRenderer implements GLSurfaceView.Renderer
       mCenterEffects.quaternion(mQuatInt2, rotateCen);
 
       mCenterEffects.move( new Static3D( (width -factorCen*centerSize-mFactorObj*mObjWidth )/2 ,
-                                  (height-factorCen*centerSize-mFactorObj*mObjHeight)/2 , mFactorObj*mObjDepth/2+10) );
+                                  (height-factorCen*centerSize-mFactorObj*mObjHeight)/2 , 10) );
       mCenterEffects.move(mCenterInter);
       mCenterEffects.scale(factorCen);
 
@@ -223,7 +222,7 @@ class Effects3DRenderer implements GLSurfaceView.Renderer
       mRegionEffects.quaternion(mQuatInt2, rotateCen);
 
       mRegionEffects.move( new Static3D( (width -mFactorObj*mObjWidth )/2 ,
-                                  (height-mFactorObj*mObjHeight)/2 , mFactorObj*mObjDepth/2+12) );
+                                  (height-mFactorObj*mObjHeight)/2 , 12) );
       mRegionEffects.move(mCenterInter);
       mRegionEffects.move(mRegionInter);
       mRegionEffects.scale(mRegionScaleInter);
diff --git a/src/main/java/org/distorted/examples/multiblur/MultiblurRenderer.java b/src/main/java/org/distorted/examples/multiblur/MultiblurRenderer.java
index e2ef1c2..d30fb6a 100644
--- a/src/main/java/org/distorted/examples/multiblur/MultiblurRenderer.java
+++ b/src/main/java/org/distorted/examples/multiblur/MultiblurRenderer.java
@@ -198,7 +198,7 @@ class MultiblurRenderer implements GLSurfaceView.Renderer
       mScreenMin = width<height ? width:height;
 
     	float factor    = 0.15f*mScreenMin/OBJ_SIZE;
-      Static3D center = new Static3D( (float)OBJ_SIZE/2, (float)OBJ_SIZE/2, 0.0f );
+      Static3D center = new Static3D( (float)OBJ_SIZE/2, (float)OBJ_SIZE/2, -(float)OBJ_SIZE/2 );
       Static3D moveVec= new Static3D( (width -factor*OBJ_SIZE)/2 ,(height-factor*OBJ_SIZE)/2 ,0);
 
       for(int i=0; i<NUM_OBJECTS; i++)
diff --git a/src/main/java/org/distorted/examples/quaternion/QuaternionRenderer.java b/src/main/java/org/distorted/examples/quaternion/QuaternionRenderer.java
index e62324f..46dbd42 100644
--- a/src/main/java/org/distorted/examples/quaternion/QuaternionRenderer.java
+++ b/src/main/java/org/distorted/examples/quaternion/QuaternionRenderer.java
@@ -31,6 +31,7 @@ import org.distorted.examples.R;
 import org.distorted.library.DistortedEffects;
 import org.distorted.library.DistortedScreen;
 import org.distorted.library.EffectTypes;
+import org.distorted.library.MeshObject;
 import org.distorted.library.type.Dynamic;
 import org.distorted.library.type.DynamicQuat;
 import org.distorted.library.MeshCubes;
@@ -41,7 +42,6 @@ import org.distorted.library.Distorted;
 
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
-import android.opengl.GLES30;
 import android.opengl.GLSurfaceView;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -53,6 +53,7 @@ class QuaternionRenderer implements GLSurfaceView.Renderer
   private GLSurfaceView mView;
   private DistortedTexture mTexture;
   private DistortedEffects mEffects;
+  private MeshObject mMesh;
   private DistortedScreen mScreen;
   private DynamicQuat mRot;
     
@@ -63,6 +64,7 @@ class QuaternionRenderer implements GLSurfaceView.Renderer
     mView    = v;
     mTexture = new DistortedTexture(1,1);
     mEffects = new DistortedEffects();
+    mMesh    = new MeshCubes(1,1,false);
     mRot     = new DynamicQuat();
 
     Random rnd = new Random(System.currentTimeMillis());
@@ -85,7 +87,7 @@ class QuaternionRenderer implements GLSurfaceView.Renderer
     mRot.setMode(Dynamic.MODE_LOOP);
 
     mScreen = new DistortedScreen();
-    mScreen.attach(mTexture,mEffects,new MeshCubes(1,1,false));
+    mScreen.attach(mTexture,mEffects,mMesh);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -99,12 +101,17 @@ class QuaternionRenderer implements GLSurfaceView.Renderer
     
   public void onSurfaceChanged(GL10 glUnused, int width, int height) 
     {
-    float scaleFactor = width>height ? height/3:width/3;
+    float w = mTexture.getWidth();
+    float h = mTexture.getHeight();
+    float d = mTexture.getDepth(mMesh);
+
+    float scaleFactor = 0.5f*(width>height ? height/h:width/w);
+    Static3D center = new Static3D(w/2,h/2,-d/2);
 
     mEffects.abortEffects(EffectTypes.MATRIX);
-    mEffects.move( new Static3D( (width-scaleFactor)/2 , (height-scaleFactor)/2 , 0) );
+    mEffects.move( new Static3D( (width-scaleFactor*w)/2 , (height-scaleFactor*h)/2 , 0) );
     mEffects.scale(scaleFactor);
-    mEffects.quaternion( mRot, new Static3D( (float)mTexture.getWidth()/2, (float)mTexture.getHeight()/2 , 0) );
+    mEffects.quaternion( mRot,center );
        
     mScreen.resize(width, height);
     }
