commit 37320052fe00f1de2e6d8397335d59fcb5c5a946
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Wed Mar 4 00:13:02 2020 +0000

    New MeshJoined.
    Test app says it's not working - bug in MeshBase.join().

diff --git a/src/main/java/org/distorted/examples/meshjoin/MeshJoinRenderer.java b/src/main/java/org/distorted/examples/meshjoin/MeshJoinRenderer.java
index 19e1b87..7a6faa9 100644
--- a/src/main/java/org/distorted/examples/meshjoin/MeshJoinRenderer.java
+++ b/src/main/java/org/distorted/examples/meshjoin/MeshJoinRenderer.java
@@ -27,14 +27,17 @@ import org.distorted.examples.R;
 import org.distorted.library.effect.MatrixEffect;
 import org.distorted.library.effect.MatrixEffectMove;
 import org.distorted.library.effect.MatrixEffectQuaternion;
+import org.distorted.library.effect.MatrixEffectRotate;
 import org.distorted.library.effect.MatrixEffectScale;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedLibrary;
 import org.distorted.library.main.DistortedScreen;
 import org.distorted.library.main.DistortedTexture;
 import org.distorted.library.mesh.MeshBase;
+import org.distorted.library.mesh.MeshJoined;
 import org.distorted.library.mesh.MeshQuad;
 import org.distorted.library.type.DynamicQuat;
+import org.distorted.library.type.Static1D;
 import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
 
@@ -54,7 +57,6 @@ class MeshJoinRenderer implements GLSurfaceView.Renderer
     private DistortedEffects mEffects;
     private Static3D mScale;
     private MeshBase mMesh;
-    private float mObjHeight, mObjWidth, mObjDepth;
 
     Static4D mQuat1, mQuat2;
     int mScreenMin;
@@ -95,9 +97,8 @@ class MeshJoinRenderer implements GLSurfaceView.Renderer
     public void onSurfaceChanged(GL10 glUnused, int width, int height) 
       {
       final float SCALE = 0.75f;
-
       mScreenMin = width<height ? width:height;
-      float factor = ( width*mObjHeight > height*mObjWidth ) ? (SCALE*height)/mObjHeight :  (SCALE*width)/mObjWidth;
+      float factor = SCALE*mScreenMin;
       mScale.set(factor,factor,factor);
       mScreen.resize(width, height);
       }
@@ -127,10 +128,6 @@ class MeshJoinRenderer implements GLSurfaceView.Renderer
 
       if( mMesh==null ) mMesh = createJoinedMesh();
 
-      mObjWidth = mMesh.getStretchX();
-      mObjHeight= mMesh.getStretchY();
-      mObjDepth = mMesh.getStretchZ();
-
       mScreen.detachAll();
       mScreen.attach(mTexture,mEffects,mMesh);
 
@@ -148,12 +145,27 @@ class MeshJoinRenderer implements GLSurfaceView.Renderer
 
     private MeshBase createJoinedMesh()
       {
-      MatrixEffect[] effects = new MatrixEffect[1];
-      effects[0] = new MatrixEffectMove(new Static3D(0,0,0.5f));
+      Static3D axis   = new Static3D(0,1,0);
+      Static3D center = new Static3D(0,0,0);
+      Static1D angle  = new Static1D(0);
+
+      MatrixEffect[] effects = new MatrixEffect[2];
+      effects[0] = new MatrixEffectMove(new Static3D(0,0,-0.5f));
+      effects[1] = new MatrixEffectRotate( angle, axis, center );
+
+      MeshBase[] meshes = new MeshQuad[4];
+
+      for(int i=0; i<4; i++) meshes[i] = new MeshQuad();
 
-      MeshBase mesh = new MeshQuad();
-      mesh.apply(effects);
+      angle.set(0);
+      meshes[0].apply(effects);
+      angle.set(90);
+      meshes[1].apply(effects);
+      angle.set(180);
+      meshes[2].apply(effects);
+      angle.set(270);
+      meshes[3].apply(effects);
 
-      return mesh;
+      return new MeshJoined(meshes);
       }
 }
