commit 4d49605b9547ada8e7abc432ce8270e8c3459232
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Wed Jun 21 00:17:39 2023 +0200

    Make it possible to control if we can see the normal vectors.

diff --git a/src/main/java/org/distorted/examples/meshfile/MeshFileActivity.java b/src/main/java/org/distorted/examples/meshfile/MeshFileActivity.java
index 19ed41b..9b837c6 100644
--- a/src/main/java/org/distorted/examples/meshfile/MeshFileActivity.java
+++ b/src/main/java/org/distorted/examples/meshfile/MeshFileActivity.java
@@ -119,6 +119,15 @@ public class MeshFileActivity extends Activity implements AdapterView.OnItemSele
       super.onDestroy();
       }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public void onNormals(View v)
+      {
+      MeshFileSurfaceView view = findViewById(R.id.meshfileSurfaceView);
+      MeshFileRenderer renderer = view.getRenderer();
+      renderer.flipNormals();
+      }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public void Open(View v)
diff --git a/src/main/java/org/distorted/examples/meshfile/MeshFileRenderer.java b/src/main/java/org/distorted/examples/meshfile/MeshFileRenderer.java
index fdbca8a..bd5ee5b 100644
--- a/src/main/java/org/distorted/examples/meshfile/MeshFileRenderer.java
+++ b/src/main/java/org/distorted/examples/meshfile/MeshFileRenderer.java
@@ -78,6 +78,7 @@ class MeshFileRenderer implements GLSurfaceView.Renderer, DistortedLibrary.Libra
     private MeshBase mMesh;
     private long mTime;
     private float mCurrentScale;
+    private boolean mNormals;
 
     Static4D mQuat1, mQuat2;
     int mScreenMin;
@@ -94,6 +95,7 @@ class MeshFileRenderer implements GLSurfaceView.Renderer, DistortedLibrary.Libra
       Static3D center=new Static3D(0,0,0);
 
       mCurrentScale = DEFAULT_SCALE;
+      mNormals = false;
 
       mQuat1 = new Static4D(0,0,0,1);
       mQuat2 = new Static4D(0,0,0,1);
@@ -167,6 +169,14 @@ class MeshFileRenderer implements GLSurfaceView.Renderer, DistortedLibrary.Libra
       mScale.set(factor,factor,factor);
       }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    void flipNormals()
+      {
+      mNormals = !mNormals;
+      if( mMesh!=null ) mMesh.setShowNormals(mNormals);
+      }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     void open(int resourceID)
@@ -297,7 +307,6 @@ class MeshFileRenderer implements GLSurfaceView.Renderer, DistortedLibrary.Libra
 
       mMesh = new MeshPolygon(vertices,bands,edgesUp,vertsUp,extraIndex,extraVertices,0.0f,0.0f);
       mMesh.setEffectAssociation(0,0,0);
-      mMesh.setShowNormals(true);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -346,14 +355,13 @@ class MeshFileRenderer implements GLSurfaceView.Renderer, DistortedLibrary.Libra
         {
         mMesh.setEffectAssociation(i, 0, i);
         }
-
-     // mMesh.setShowNormals(true);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     private void createMesh()
       {
+      /*
       float A = 2.0f;
 
       float[][] vertices =
@@ -403,10 +411,28 @@ class MeshFileRenderer implements GLSurfaceView.Renderer, DistortedLibrary.Libra
       float[][] corners= { {0.036f,0.12f} };
       float[][] centers= { {0.0f, 0.0f, 0.0f} };
       int[] ind    = { 0,0,-1,-1,-1,-1,-1,-1, 0,0,0,0,0,0,0,0 };
+      */
+      float[][] vertices = { {-1.5f, 0.0f, 0.0f},{ 1.5f, 0.0f, 0.0f},{ 0.0f,-1.5f, 0.0f},{ 0.0f, 0.0f,-1.5f},{0,0,0} };
+      int[][][] vertIndices = { {{2,1,4},{4,0,2}},{{3,0,4},{4,1,3}},{{2,3,1}},{{3,2,0}} };
+      float h1 = 0.035f;
+      float h2 = 0.010f;
+      int angle = 30;
+      float R = 0.7f;
+      float S = 0.5f;
+      int N   = 6;
+      int exI = 2;
+      int exV = 2;
+      float[][] bands  = { {h1,angle,R,S,N,exI,exV}, {h2,angle,R,S,N,exI,exV} };
+      int[] bandIndices= { 0,0,1,1 };
+      float[] convex = null;
+      float[][] corners   = { {0.07f,0.40f}, {0.05f,0.30f} };
+      int[] cornerIndices = { 0,0,1,1,-1 };
+      float[][] centers   = { {0.0f, -0.75f, -0.75f} };
+      int[] centerIndices = { 0,0,0,0,-1 };
 
       ObjectShape shape = new ObjectShape(vertices, vertIndices);
       ObjectFaceShape face = new ObjectFaceShape(bands, bandIndices, convex);
-      ObjectVertexEffects effects = FactoryCubit.generateVertexEffect(vertices,corners,ind,centers,ind);
+      ObjectVertexEffects effects = FactoryCubit.generateVertexEffect(vertices,corners,cornerIndices,centers,centerIndices);
 
       int numFaces = shape.getNumFaces();
       int[] outer = new int[numFaces];
diff --git a/src/main/res/layout/meshfilelayout.xml b/src/main/res/layout/meshfilelayout.xml
index 0f47fd7..a64222a 100644
--- a/src/main/res/layout/meshfilelayout.xml
+++ b/src/main/res/layout/meshfilelayout.xml
@@ -24,10 +24,18 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content">
 
+        <CheckBox
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:id="@+id/meshfileNormals"
+            android:layout_weight="0.2"
+            android:onClick="onNormals"
+            android:checked="false"/>
+
         <Spinner
             android:layout_width="0dp"
             android:layout_height="wrap_content"
-            android:layout_weight="0.5"
+            android:layout_weight="0.9"
             android:id="@+id/meshfileSpinner"/>
 
         <Button
