commit b3090c525c5035034a2a9b416c49d8bb463b5530
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Wed Mar 4 22:54:47 2020 +0000

    Minor.
    Looks like MeshBase.join() actually works.

diff --git a/src/main/java/org/distorted/examples/meshjoin/MeshJoinRenderer.java b/src/main/java/org/distorted/examples/meshjoin/MeshJoinRenderer.java
index 7a6faa9..e248584 100644
--- a/src/main/java/org/distorted/examples/meshjoin/MeshJoinRenderer.java
+++ b/src/main/java/org/distorted/examples/meshjoin/MeshJoinRenderer.java
@@ -36,6 +36,9 @@ 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.mesh.MeshRectangles;
+import org.distorted.library.mesh.MeshSphere;
+import org.distorted.library.mesh.MeshTriangles;
 import org.distorted.library.type.DynamicQuat;
 import org.distorted.library.type.Static1D;
 import org.distorted.library.type.Static3D;
@@ -96,7 +99,7 @@ class MeshJoinRenderer implements GLSurfaceView.Renderer
     
     public void onSurfaceChanged(GL10 glUnused, int width, int height) 
       {
-      final float SCALE = 0.75f;
+      final float SCALE = 0.6f;
       mScreenMin = width<height ? width:height;
       float factor = SCALE*mScreenMin;
       mScale.set(factor,factor,factor);
@@ -128,6 +131,8 @@ class MeshJoinRenderer implements GLSurfaceView.Renderer
 
       if( mMesh==null ) mMesh = createJoinedMesh();
 
+      mMesh.setShowNormals(true);
+
       mScreen.detachAll();
       mScreen.attach(mTexture,mEffects,mMesh);
 
@@ -145,27 +150,54 @@ class MeshJoinRenderer implements GLSurfaceView.Renderer
 
     private MeshBase createJoinedMesh()
       {
-      Static3D axis   = new Static3D(0,1,0);
+      MeshBase[] meshes = new MeshBase[2];
+      meshes[0] = new MeshSphere(5);
+      meshes[1] = new MeshTriangles(5);
+
+      MatrixEffect[] effects0 = new MatrixEffect[2];
+      effects0[0] = new MatrixEffectScale( new Static3D(0.5f, 1.0f, 0.5f) );
+      effects0[1] = new MatrixEffectMove( new Static3D(+0.25f,0,0));
+
+      meshes[0].apply(effects0);
+
+      MatrixEffect[] effects1 = new MatrixEffect[2];
+      effects1[0] = new MatrixEffectScale( new Static3D(0.5f, 1.0f, 0.5f) );
+      effects1[1] = new MatrixEffectMove( new Static3D(-0.25f,0,0));
+
+      meshes[1].apply(effects1);
+      /*
+      final int MESHES=6;
+
+      Static3D axisY  = new Static3D(0,1,0);
+      Static3D axisX  = new Static3D(1,0,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 );
+      MatrixEffect[] effectsY = new MatrixEffect[2];
+      effectsY[0] = new MatrixEffectMove(new Static3D(0,0,+0.5f));
+      effectsY[1] = new MatrixEffectRotate( angle, axisY, center );
 
-      MeshBase[] meshes = new MeshQuad[4];
-
-      for(int i=0; i<4; i++) meshes[i] = new MeshQuad();
+      MeshBase[] meshes = new MeshRectangles[MESHES];
+      for(int i=0; i<MESHES; i++) meshes[i] = new MeshRectangles(5,5);
 
       angle.set(0);
-      meshes[0].apply(effects);
+      meshes[0].apply(effectsY);
       angle.set(90);
-      meshes[1].apply(effects);
+      meshes[1].apply(effectsY);
       angle.set(180);
-      meshes[2].apply(effects);
+      meshes[2].apply(effectsY);
       angle.set(270);
-      meshes[3].apply(effects);
+      meshes[3].apply(effectsY);
+
+      MatrixEffect[] effectsX = new MatrixEffect[2];
+      effectsX[0] = new MatrixEffectMove(new Static3D(0,0,+0.5f));
+      effectsX[1] = new MatrixEffectRotate( angle, axisX, center );
 
+      angle.set( 90);
+      meshes[4].apply(effectsX);
+      angle.set(-90);
+      meshes[5].apply(effectsX);
+*/
       return new MeshJoined(meshes);
       }
 }
