commit 962437b5c2ec033c53376fdc91a047961371b8fc
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Mon Oct 5 01:27:31 2020 +0100

    Add the Redi Cube: part2.

diff --git a/src/main/java/org/distorted/objects/CubitFactory.java b/src/main/java/org/distorted/objects/CubitFactory.java
index 13b79345..9bbf3dd6 100644
--- a/src/main/java/org/distorted/objects/CubitFactory.java
+++ b/src/main/java/org/distorted/objects/CubitFactory.java
@@ -1147,7 +1147,10 @@ public class CubitFactory
                        0.90f   , D,
                        0.0f    , D };
 
-    float[] vertices2 = { -0.5f*SQ2, SQ6/8, -0.75f*SQ2, -SQ6/8, +0.75f*SQ2, -SQ6/8, +0.5f*SQ2, SQ6/8 };
+    float X = 0.25f*SQ2;
+    float Y = SQ6/16;
+
+    float[] vertices2 = { -X, Y, -1.5f*X, -Y, +1.5f*X, -Y, +X, Y };
 
     meshes[4] = new MeshPolygon(vertices2, bands2, 1, 1);
     meshes[4].setEffectAssociation(0,16,0);
@@ -1185,7 +1188,7 @@ public class CubitFactory
     VertexEffect effect10= new VertexEffectRotate(angle3,axis ,cent1);
     VertexEffect effect11= new VertexEffectScale(flipX);
 
-    effect0.setMeshAssociation(15,-1);  // meshes 0,1,2,3
+    effect0.setMeshAssociation(63,-1);  // meshes 0,1,2,3,4,5
     effect1.setMeshAssociation( 3,-1);  // meshes 0,1
     effect2.setMeshAssociation( 2,-1);  // mesh 1
     effect3.setMeshAssociation( 2,-1);  // mesh 1
@@ -1215,6 +1218,125 @@ public class CubitFactory
 
     mesh.mergeEffComponents();
 
+    return mesh;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  MeshBase createRediCornerMesh()
+    {
+    final int MESHES=6;
+
+    float D = 0.027f;
+    float E = 0.5f;
+    float[] vertices1 = { -E,-E, +E,-E, +E,+E, -E,+E };
+
+    float[] bands1 = new float[] { 1.0f    ,-D,
+                                  1.0f-D/2,-D*0.55f,
+                                  1.0f-D  ,-D*0.25f,
+                                  1.0f-2*D, 0.0f,
+                                  0.50f   , 0.040f,
+                                  0.0f    , 0.048f };
+
+    MeshBase[] meshes = new MeshBase[MESHES];
+    meshes[0] = new MeshPolygon(vertices1,bands1,2,2);
+    meshes[0].setEffectAssociation(0,1,0);
+    meshes[1] = meshes[0].copy(true);
+    meshes[1].setEffectAssociation(0,2,0);
+    meshes[2] = meshes[0].copy(true);
+    meshes[2].setEffectAssociation(0,4,0);
+
+    float F = SQ2/2;
+    float X = 0.5f;
+
+    float[] vertices2 = { -E,+F, -E+X,0, -E,-F, +E,-F, +E-X,0, +E,+F };
+
+    float[] bands2 = new float[] { 1.0f,0.0f,
+                                   0.0f,0.0f };
+
+    meshes[3] = new MeshPolygon(vertices2,bands2,0,0);
+    meshes[3].setEffectAssociation(0,8,0);
+    meshes[4] = meshes[3].copy(true);
+    meshes[4].setEffectAssociation(0,16,0);
+    meshes[5] = meshes[3].copy(true);
+    meshes[5].setEffectAssociation(0,32,0);
+
+    MeshBase mesh = new MeshJoined(meshes);
+
+    Static3D axisY   = new Static3D(0,1,0);
+    Static3D axisX   = new Static3D(1,0,0);
+    Static3D axisZ   = new Static3D(0,0,1);
+    Static3D center  = new Static3D(0,0,0);
+    Static1D angle90 = new Static1D(90);
+    Static1D angle270= new Static1D(270);
+    Static1D angle45 = new Static1D(-45);
+
+    float d1 = 1.0f;
+    float d2 =-0.05f;
+    float d3 = 0.12f;
+
+    Static3D dCen0 = new Static3D( d1*(+0.5f), d1*(+0.5f), d1*(+0.5f) );
+    Static3D dCen1 = new Static3D( d1*(+0.5f), d1*(+0.5f), d1*(-0.5f) );
+    Static3D dCen2 = new Static3D( d1*(+0.5f), d1*(-0.5f), d1*(+0.5f) );
+    Static3D dCen3 = new Static3D( d1*(+0.5f), d1*(-0.5f), d1*(-0.5f) );
+    Static3D dCen4 = new Static3D( d1*(-0.5f), d1*(+0.5f), d1*(+0.5f) );
+    Static3D dCen5 = new Static3D( d1*(-0.5f), d1*(+0.5f), d1*(-0.5f) );
+    Static3D dCen6 = new Static3D( d1*(-0.5f), d1*(-0.5f), d1*(+0.5f) );
+    Static3D dCen7 = new Static3D( d1*(-0.5f), d1*(-0.5f), d1*(-0.5f) );
+
+    Static3D dVec0 = new Static3D( d2*(+0.5f), d2*(+0.5f), d2*(+0.5f) );
+    Static3D dVec1 = new Static3D( d2*(+0.5f), d2*(+0.5f), d2*(-0.5f) );
+    Static3D dVec2 = new Static3D( d2*(+0.5f), d2*(-0.5f), d2*(+0.5f) );
+    Static3D dVec3 = new Static3D( d2*(+0.5f), d2*(-0.5f), d2*(-0.5f) );
+    Static3D dVec4 = new Static3D( d2*(-0.5f), d2*(+0.5f), d2*(+0.5f) );
+    Static3D dVec5 = new Static3D( d2*(-0.5f), d2*(+0.5f), d2*(-0.5f) );
+    Static3D dVec6 = new Static3D( d2*(-0.5f), d2*(-0.5f), d2*(+0.5f) );
+    Static3D dVec7 = new Static3D( d2*(-0.5f), d2*(-0.5f), d2*(-0.5f) );
+
+    Static4D dReg  = new Static4D(0,0,0,d3);
+    Static1D dRad  = new Static1D(1);
+
+    VertexEffect effect0 = new VertexEffectMove(new Static3D(0,0,+0.5f));
+    VertexEffect effect1 = new VertexEffectRotate( angle270, axisX, center );
+    VertexEffect effect2 = new VertexEffectRotate( angle90 , axisY, center );
+    VertexEffect effect3 = new VertexEffectRotate( angle45 , axisX, center );
+    VertexEffect effect4 = new VertexEffectRotate( angle90 , axisY, center );
+    VertexEffect effect5 = new VertexEffectRotate( angle270, axisZ, center );
+
+    VertexEffect effect6 = new VertexEffectDeform(dVec0, dRad, dCen0, dReg);
+    VertexEffect effect7 = new VertexEffectDeform(dVec1, dRad, dCen1, dReg);
+    VertexEffect effect8 = new VertexEffectDeform(dVec2, dRad, dCen2, dReg);
+    VertexEffect effect9 = new VertexEffectDeform(dVec3, dRad, dCen3, dReg);
+    VertexEffect effect10= new VertexEffectDeform(dVec4, dRad, dCen4, dReg);
+    VertexEffect effect11= new VertexEffectDeform(dVec5, dRad, dCen5, dReg);
+    VertexEffect effect12= new VertexEffectDeform(dVec6, dRad, dCen6, dReg);
+    VertexEffect effect13= new VertexEffectDeform(dVec7, dRad, dCen7, dReg);
+
+    effect0.setMeshAssociation( 7,-1);  // 0,1,2
+    effect1.setMeshAssociation( 2,-1);  // 1
+    effect2.setMeshAssociation( 4,-1);  // 2
+    effect3.setMeshAssociation(56,-1);  // 3
+    effect4.setMeshAssociation(16,-1);  // 4
+    effect5.setMeshAssociation(32,-1);  // 5
+
+    mesh.apply(effect0);
+    mesh.apply(effect1);
+    mesh.apply(effect2);
+    mesh.apply(effect3);
+    mesh.apply(effect4);
+    mesh.apply(effect5);
+
+    mesh.apply(effect6);
+    mesh.apply(effect7);
+    mesh.apply(effect8);
+    mesh.apply(effect9);
+    mesh.apply(effect10);
+    mesh.apply(effect11);
+    mesh.apply(effect12);
+    mesh.apply(effect13);
+
+    mesh.mergeEffComponents();
+
     return mesh;
     }
   }
diff --git a/src/main/java/org/distorted/objects/TwistyRedi.java b/src/main/java/org/distorted/objects/TwistyRedi.java
index babfa7ea..84b5dbe2 100644
--- a/src/main/java/org/distorted/objects/TwistyRedi.java
+++ b/src/main/java/org/distorted/objects/TwistyRedi.java
@@ -113,14 +113,14 @@ public class TwistyRedi extends TwistyObject
   // YELLOW 6 WHITE 7 BLUE 8 GREEN 9 RED 10 BROWN 11
   private static final int[][] mFaceMap = new int[][]
          {
-           {  0,12, 2,12, 4,12 },
-           {  0,12, 5,12, 2,12 },
-           {  0,12, 4,12, 3,12 },
-           {  0,12, 3,12, 5,12 },
-           {  4,12, 2,12, 1,12 },
-           {  1,12, 2,12, 5,12 },
-           {  1,12, 3,12, 4,12 },
-           {  5,12, 3,12, 1,12 },
+           {  4, 2, 0,12,12,12 },
+           {  2, 5, 0,12,12,12 },
+           {  3, 4, 0,12,12,12 },
+           {  5, 3, 0,12,12,12 },
+           {  1, 2, 4,12,12,12 },
+           {  5, 2, 1,12,12,12 },
+           {  4, 3, 1,12,12,12 },
+           {  1, 3, 5,12,12,12 },
 
            { 10, 8,12,12,12,12 },
            {  6,10,12,12,12,12 },
@@ -242,7 +242,7 @@ public class TwistyRedi extends TwistyObject
 
     if( cubit<8 )
       {
-      if( mCornerMesh==null ) mCornerMesh = CubitFactory.getInstance().createCubeMesh(0);
+      if( mCornerMesh==null ) mCornerMesh = CubitFactory.getInstance().createRediCornerMesh();
       mesh = mCornerMesh.copy(true);
       }
     else
