commit 1c41c4c9d40fb99731520090c4b5dfb98030ac6f
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Tue Dec 8 23:46:29 2020 +0100

    Improve the Ivy mesh.

diff --git a/src/main/java/org/distorted/examples/meshfile/FactoryCubit.java b/src/main/java/org/distorted/examples/meshfile/FactoryCubit.java
index d67b866..f069e82 100644
--- a/src/main/java/org/distorted/examples/meshfile/FactoryCubit.java
+++ b/src/main/java/org/distorted/examples/meshfile/FactoryCubit.java
@@ -39,8 +39,10 @@ class FactoryCubit
   private static final float SQ3 = (float)Math.sqrt(3);
   private static final float SQ6 = (float)Math.sqrt(6);
 
-  private static final float IVY_D = 0.10f;
+  private static final float IVY_D = 0.003f;
   private static final int   IVY_N = 8;
+  private static final float IVY_C = 0.59f;
+  private static final float IVY_M = 0.35f;
 
   private static final Static1D RADIUS = new Static1D(1);
 
@@ -505,37 +507,37 @@ class FactoryCubit
     MeshBase[] meshes = new MeshBase[6];
 
     final float angle = (float)Math.PI/(2*IVY_N);
-    final float CORR  = 1.0f - IVY_D*SQ2;
-    final float DIST  = 0.4f;
-    final float CORR2 = 0.5f;
-    float[] vertices = new float[2*(IVY_N+1)+6];
+    final float CORR  = 1.0f - 2*IVY_D;
+    final float DIST  = -0.5f*CORR + IVY_D;
+    float[] vertices  = new float[2*(IVY_N+1)+6];
 
-    vertices[0] = (-0.5f+IVY_D-DIST)*CORR2;
-    vertices[1] = ( 0.5f      -DIST)*CORR2;
-    vertices[2] = ( 0.5f      -DIST)*CORR2;
-    vertices[3] = ( 0.5f      -DIST)*CORR2;
-    vertices[4] = ( 0.5f      -DIST)*CORR2;
-    vertices[5] = (-0.5f+IVY_D-DIST)*CORR2;
+    vertices[0] = (0.5f-IVY_M) * IVY_C;
+    vertices[1] = (DIST-IVY_M) * IVY_C;
+    vertices[2] = (0.5f-IVY_M) * IVY_C;
+    vertices[3] = (0.5f-IVY_M) * IVY_C;
+    vertices[4] = (DIST-IVY_M) * IVY_C;
+    vertices[5] = (0.5f-IVY_M) * IVY_C;
 
     for(int i=0; i<=IVY_N; i++)
       {
-      float sin = (float)Math.sin(i*angle);
-      float cos = (float)Math.cos(i*angle);
+      float ang = (IVY_N-i)*angle;
+      float sin = (float)Math.sin(ang);
+      float cos = (float)Math.cos(ang);
 
-      vertices[2*i+6] = (CORR*(cos-0.5f)-DIST)*CORR2;
-      vertices[2*i+7] = (CORR*(sin-0.5f)-DIST)*CORR2;
+      vertices[2*i+6] = (CORR*(cos-0.5f)-IVY_M)*IVY_C;
+      vertices[2*i+7] = (CORR*(sin-0.5f)-IVY_M)*IVY_C;
       }
 
-    float[] bands0 = computeBands(+0.02f,18,0.2f,0.5f,5);
-    float[] bands1 = computeBands(-0.10f,20,0.2f,0.0f,2);
+    float[] bands0 = computeBands(+0.012f,20,0.2f,0.5f,7);
+    float[] bands1 = computeBands(-0.100f,20,0.2f,0.0f,2);
 
-    meshes[0] = new MeshPolygon(vertices,bands0,0,0);
+    meshes[0] = new MeshPolygon(vertices,bands0,1,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);
-    meshes[3] = new MeshPolygon(vertices,bands1,0,0);
+    meshes[3] = new MeshPolygon(vertices,bands1,1,2);
     meshes[3].setEffectAssociation(0,8,0);
     meshes[4] = meshes[3].copy(true);
     meshes[4].setEffectAssociation(0,16,0);
@@ -982,18 +984,16 @@ class FactoryCubit
 
   VertexEffect[] createVertexEffectsIvyCorner()
     {
-    float DIST=0.1f;
-
     Static3D axisX  = new Static3D(1,0,0);
     Static3D axisY  = new Static3D(0,1,0);
     Static1D angle1 = new Static1D(+90);
     Static1D angle2 = new Static1D(-90);
     Static3D center = new Static3D(0,0,0);
-    Static3D move1  = new Static3D(-DIST,-DIST,0);
+    Static3D move1  = new Static3D(IVY_M-0.5f,IVY_M-0.5f,0);
 
     VertexEffect[] effect = new VertexEffect[5];
 
-    effect[0] = new VertexEffectScale(2.0f);
+    effect[0] = new VertexEffectScale(1/IVY_C);
     effect[1] = new VertexEffectMove(move1);
     effect[2] = new VertexEffectScale(new Static3D(1,1,-1));
     effect[3] = new VertexEffectRotate(angle1,axisX,center);
@@ -1268,13 +1268,12 @@ class FactoryCubit
 
     Static3D center = new Static3D(-0.5f,-0.5f,-0.5f);
     Static3D[] vertices = new Static3D[4];
-    float DIST = IVY_D-0.5f;
-    vertices[0] = new Static3D(+0.5f,+0.5f,+0.5f);
-    vertices[1] = new Static3D( DIST,+0.5f,+0.5f);
-    vertices[2] = new Static3D(+0.5f, DIST,+0.5f);
-    vertices[3] = new Static3D(+0.5f,+0.5f, DIST);
+    vertices[0] = new Static3D(+0.0f,+0.0f,+0.0f);
+    vertices[1] = new Static3D(-1.0f,+0.0f,+0.0f);
+    vertices[2] = new Static3D(+0.0f,-1.0f,+0.0f);
+    vertices[3] = new Static3D(+0.0f,+0.0f,-1.0f);
 
-    roundCorners(mesh,center,vertices,0.06f,0.12f);
+    roundCorners(mesh,center,vertices,0.03f,0.10f);
 
     mesh.mergeEffComponents();
 
@@ -1287,13 +1286,12 @@ class FactoryCubit
     {
     MeshBase mesh = createFacesIvyFace();
 
-    float DIST = SQ2*(0.5f-IVY_D);
-    Static3D center = new Static3D(0.0f,0.0f,-0.0f);
+    Static3D center = new Static3D(-0.0f,-0.0f,-0.5f);
     Static3D[] vertices = new Static3D[2];
-    vertices[0] = new Static3D(+DIST,-DIST,+0.0f);
-    vertices[1] = new Static3D(-DIST,+DIST,+0.0f);
+    vertices[0] = new Static3D(-0.5f,+0.5f,+0.0f);
+    vertices[1] = new Static3D(+0.5f,-0.5f,+0.0f);
 
-    roundCorners(mesh,center,vertices,0.10f,0.30f);
+    roundCorners(mesh,center,vertices,0.03f,0.10f);
 
     mesh.mergeEffComponents();
     mesh.addEmptyTexComponent();
diff --git a/src/main/java/org/distorted/examples/meshfile/MeshFileRenderer.java b/src/main/java/org/distorted/examples/meshfile/MeshFileRenderer.java
index 997e901..cbfad70 100644
--- a/src/main/java/org/distorted/examples/meshfile/MeshFileRenderer.java
+++ b/src/main/java/org/distorted/examples/meshfile/MeshFileRenderer.java
@@ -330,7 +330,10 @@ class MeshFileRenderer implements GLSurfaceView.Renderer, DistortedLibrary.Excep
 
     private void createMesh()
       {
-      mMesh = createStaticMesh();
+      FactoryCubit factory = FactoryCubit.getInstance();
+      mMesh = factory.createIvyCornerMesh();
+
+      //mMesh = createStaticMesh();
 
       int numEff = mMesh.numEffComponents();
 
