commit b3a555a7f5a9ca17a20155f0fa31fcb506e4d3ee
Author: Leszek Koltunski <leszek@distoretedandroid.org>
Date:   Wed Nov 16 17:32:40 2016 +0000

    Improve Around The World

diff --git a/src/main/java/org/distorted/examples/aroundtheworld/AroundTheWorldEffectsManager.java b/src/main/java/org/distorted/examples/aroundtheworld/AroundTheWorldEffectsManager.java
index 8a6e66e..a0a57aa 100644
--- a/src/main/java/org/distorted/examples/aroundtheworld/AroundTheWorldEffectsManager.java
+++ b/src/main/java/org/distorted/examples/aroundtheworld/AroundTheWorldEffectsManager.java
@@ -35,64 +35,124 @@ import org.distorted.library.type.Static5D;
 
 class AroundTheWorldEffectsManager
   {
-  private float mBlackness, mAsianness;
-
-  private Static4D regionPinchSwirl, regionNose, regionLips, regionSkin, regionLEye, regionREye;
-  private Static3D centerLEyeSwirl, centerREyeSwirl, centerLEyePinch, centerREyePinch, centerNose, centerLips;
-
-  private Dynamic2D pinchDyn;
-  private Dynamic1D swirlDyn1, swirlDyn2, sinkDyn;
-  private Static1D swirlFactor1, swirlFactor2, sinkFactor;
-  private Static2D pinchFactor;
-
-  private Static3D chromaSkin, chromaEyes;
-  private Static1D chromaSkinFactor, chromaEyesFactor;
-  private Dynamic1D chromaSkinDyn, chromaEyesDyn;
+  private float mWhiteness, mBlackness, mAsianness;  // those always sum up to 1
+
+  // WHITENESS
+  // Vertex effects:
+  // a) make the lips smaller (SINK)
+  private Static4D wRegionLips;
+  private Static3D wCenterLips;
+  private Static1D wLipsFactor;
+  private Dynamic1D wLipsDyn;
+
+  // ASIANNESS
+  // Vertex Effects:
+  // a) move lips & nose higher (DISTORT)
+  private Static4D aRegionLipsNose;
+  private Static3D aCenterLipsNose;
+  private Static3D aLipsNoseFactor;
+  private Dynamic3D aLipsNoseDyn;
+  // b) make the nose broader (PINCH)
+  private Static4D aRegionNoseBroader;
+  private Static3D aCenterNoseBroader;
+  private Static2D aNoseBroaderFactor;
+  private Dynamic2D aNoseBroaderDyn;
+  // c) make the nostrils more visible (DISTORT)
+  private Static4D aRegionNostrils;
+  private Static3D aCenterNostrils;
+  private Static3D aNostrilsFactor;
+  private Dynamic3D aNostrilsDyn;
+  // d) rotate eyes (2 x SWIRL)
+  private Static4D aRegionEyes;
+  private Static3D aCenterLEye, aCenterREye;
+  private Static1D aLEyeFactor, aREyeFactor;
+  private Dynamic1D aLEyeDyn, aREyeDyn;
+  // e) move eyebrow higher (DISTORT)
+  private Static4D aRegionEyebrows;
+  private Static3D aCenterEyebrows;
+  private Static3D aEyebrowsFactor;
+  private Dynamic3D aEyebrowsDyn;
+
+  // Fragment effects:
+  // a) change color of the skin to more brown and less red (CHROMA)
+  private Static4D aRegionSkinColor;
+  private Static3D aChromaSkin;
+  private Static1D aChromaSkinFactor;
+  private Dynamic1D aChromaSkinDyn;
+  // b) darken both eyes (2 x SMOOTH_CHROMA)
+  private Static4D aRegionLEyeColor, aRegionREyeColor;
+  private Static3D aChromaEyes;
+  private Static1D aChromaEyesFactor;
+  private Dynamic1D aChromaEyesDyn;
+
+  // BLACKNESS
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   AroundTheWorldEffectsManager()
     {
+    mWhiteness = 1;
     mBlackness = 0;
     mAsianness = 0;
 
-    centerLEyePinch  = new Static3D(140,235,0);
-    centerREyePinch  = new Static3D(453,235,0);
-    centerLEyeSwirl  = new Static3D(175,235,0);
-    centerREyeSwirl  = new Static3D(418,235,0);
-    centerNose       = new Static3D(300,328,0);
-    centerLips       = new Static3D(300,494,0);
-
-    regionPinchSwirl = new Static4D(0,0,65,65);
-    regionNose       = new Static4D(0,0,89,89);
-    regionLips       = new Static4D(0,0,95,95);
-    regionSkin       = new Static4D(300,300,600,600);
-    regionLEye       = new Static4D(175,232,31,20);
-    regionREye       = new Static4D(420,232,31,20);
-
-    pinchFactor      = new Static2D(1.0f, 0.0f);
-    swirlFactor1     = new Static1D(1.0f);
-    swirlFactor2     = new Static1D(1.0f);
-    sinkFactor       = new Static1D(1.0f);
-
-    chromaSkin       = new Static3D(0.5f, 0.11f, 0.11f);
-    chromaEyes       = new Static3D(0.5f, 0.14f, 0.14f);
-    chromaSkinFactor = new Static1D(0.0f);
-    chromaEyesFactor = new Static1D(0.0f);
-
-    pinchDyn = new Dynamic2D();
-    pinchDyn.add(pinchFactor);
-    swirlDyn1= new Dynamic1D();
-    swirlDyn1.add(swirlFactor1);
-    swirlDyn2= new Dynamic1D();
-    swirlDyn2.add(swirlFactor2);
-    sinkDyn  = new Dynamic1D();
-    sinkDyn.add(sinkFactor);
-
-    chromaSkinDyn = new Dynamic1D();
-    chromaSkinDyn.add(chromaSkinFactor);
-    chromaEyesDyn = new Dynamic1D();
-    chromaEyesDyn.add(chromaEyesFactor);
+    // WHITENESS
+    // Vertex Effects
+    wRegionLips = new Static4D(0,0,100,100);
+    wCenterLips = new Static3D(300,500,0);
+    wLipsFactor = new Static1D(0.7f);
+    wLipsDyn    = new Dynamic1D();
+    wLipsDyn.add(wLipsFactor);
+
+    // ASIANNESS
+    // Vertex Effects
+    aRegionLipsNose    = new Static4D(0,0,267,267);
+    aCenterLipsNose    = new Static3D(300,560,0);
+    aLipsNoseDyn       = new Dynamic3D();
+    aLipsNoseFactor    = new Static3D(0,0,0);
+    aLipsNoseDyn.add(aLipsNoseFactor);
+
+    aRegionNoseBroader = new Static4D(0,0,130,130);
+    aCenterNoseBroader = new Static3D(300,307,0);
+    aNoseBroaderDyn    = new Dynamic2D();
+    aNoseBroaderFactor = new Static2D(0,90);
+    aNoseBroaderDyn.add(aNoseBroaderFactor);
+
+    aRegionNostrils    = new Static4D(0,0,60,60);
+    aCenterNostrils    = new Static3D(300,336,0);
+    aNostrilsDyn       = new Dynamic3D();
+    aNostrilsFactor    = new Static3D(0,0,0);
+    aNostrilsDyn.add(aNostrilsFactor);
+
+    aRegionEyes        = new Static4D(0,0,83,83);
+    aCenterLEye        = new Static3D(176,230,0);
+    aCenterREye        = new Static3D(420,230,0);
+    aLEyeDyn           = new Dynamic1D();
+    aREyeDyn           = new Dynamic1D();
+    aLEyeFactor        = new Static1D(0);
+    aREyeFactor        = new Static1D(0);
+    aLEyeDyn.add(aLEyeFactor);
+    aREyeDyn.add(aREyeFactor);
+
+    aRegionEyebrows    = new Static4D(0,0,142,142);
+    aCenterEyebrows    = new Static3D(300,100,0);
+    aEyebrowsDyn       = new Dynamic3D();
+    aEyebrowsFactor    = new Static3D(0,0,0);
+    aEyebrowsDyn.add(aEyebrowsFactor);
+
+    // Fragment Effects
+    aRegionSkinColor   = new Static4D(300,300,600,600);
+    aRegionLEyeColor   = new Static4D(172,232,29,25);
+    aRegionREyeColor   = new Static4D(424,232,29,25);
+
+    aChromaSkin        = new Static3D(0.5f, 0.5f, 0.5f);
+    aChromaEyes        = new Static3D(0.5f, 0.14f, 0.14f);
+    aChromaSkinFactor  = new Static1D(0.0f);
+    aChromaEyesFactor  = new Static1D(0.0f);
+
+    aChromaSkinDyn = new Dynamic1D();
+    aChromaSkinDyn.add(aChromaSkinFactor);
+    aChromaEyesDyn = new Dynamic1D();
+    aChromaEyesDyn.add(aChromaEyesFactor);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -101,32 +161,48 @@ class AroundTheWorldEffectsManager
     {
     setRace(mBlackness, mAsianness);
 
-    obj.pinch(pinchDyn, centerLEyePinch, regionPinchSwirl);
-    obj.pinch(pinchDyn, centerREyePinch, regionPinchSwirl);
-    obj.swirl(swirlDyn1,centerLEyeSwirl, regionPinchSwirl);
-    obj.swirl(swirlDyn2,centerREyeSwirl, regionPinchSwirl);
-    obj.sink(sinkDyn, centerNose, regionNose);
-    obj.sink(sinkDyn, centerLips, regionLips);
+    // WHITENESS
+    obj.sink(wLipsDyn, wCenterLips, wRegionLips);
+
+    // ASIANNESS
+    obj.distort(aLipsNoseDyn, aCenterLipsNose, aRegionLipsNose);
+    obj.pinch(aNoseBroaderDyn, aCenterNoseBroader, aRegionNoseBroader);
+    obj.distort(aNostrilsDyn, aCenterNostrils, aRegionNostrils);
+    obj.swirl(aLEyeDyn, aCenterLEye, aRegionEyes);
+    obj.swirl(aREyeDyn, aCenterREye, aRegionEyes);
+    obj.distort(aEyebrowsDyn, aCenterEyebrows, aRegionEyebrows);
 
-    obj.chroma(chromaSkinDyn, chromaSkin, regionSkin, false);
-    obj.chroma(chromaEyesDyn, chromaEyes, regionLEye, true);
-    obj.chroma(chromaEyesDyn, chromaEyes, regionREye, true);
+    obj.chroma(aChromaSkinDyn, aChromaSkin, aRegionSkinColor, false);
+    obj.chroma(aChromaEyesDyn, aChromaEyes, aRegionLEyeColor, true);
+    obj.chroma(aChromaEyesDyn, aChromaEyes, aRegionREyeColor, true);
+
+    // BLACKNESS
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   synchronized void setRace(float blackness, float asianness)
     {
+    mWhiteness = 1 - blackness - asianness;
     mBlackness = blackness;
     mAsianness = asianness;
 
     //android.util.Log.e("manager", "blackness="+blackness+" asianness="+asianness);
 
-    pinchFactor.set1(1-0.3f*asianness);
-    swirlFactor1.set( 20.0f*asianness);
-    swirlFactor2.set(-20.0f*asianness);
-    sinkFactor.set(1-0.4f*asianness);
-    chromaSkinFactor.set(0.25f*asianness);
-    chromaEyesFactor.set(0.78f*asianness);
+    // WHITENESS
+    wLipsFactor.set(1.0f-0.3f*mWhiteness);
+
+    // ASIANNESS
+    aLipsNoseFactor.set2(-23.0f*mAsianness);
+    aNoseBroaderFactor.set1(1.0f+0.92f*mAsianness);
+    aNostrilsFactor.set2(-12.0f*mAsianness);
+    aLEyeFactor.set(+11.0f*mAsianness);
+    aREyeFactor.set(-11.0f*mAsianness);
+    aEyebrowsFactor.set2(-40.0f*mAsianness);
+
+    aChromaSkinFactor.set(0.2f*mAsianness);
+    aChromaEyesFactor.set(0.7f*mAsianness);
+
+    // BLACKNESS
     }
   }
diff --git a/src/main/java/org/distorted/examples/aroundtheworld/AroundTheWorldRenderer.java b/src/main/java/org/distorted/examples/aroundtheworld/AroundTheWorldRenderer.java
index 3f11ab3..e9c9a1b 100644
--- a/src/main/java/org/distorted/examples/aroundtheworld/AroundTheWorldRenderer.java
+++ b/src/main/java/org/distorted/examples/aroundtheworld/AroundTheWorldRenderer.java
@@ -53,7 +53,7 @@ class AroundTheWorldRenderer implements GLSurfaceView.Renderer
       mView = view;
       mEffects = new AroundTheWorldEffectsManager();
 
-      Distorted.setMaxVertex(6);
+      Distorted.setMaxVertex(12);
       Distorted.setMaxFragment(3);
       }
 
diff --git a/src/main/res/drawable-hdpi/icon_example_aroundtheworld.png b/src/main/res/drawable-hdpi/icon_example_aroundtheworld.png
index ecd1a29..b8eda69 100644
Binary files a/src/main/res/drawable-hdpi/icon_example_aroundtheworld.png and b/src/main/res/drawable-hdpi/icon_example_aroundtheworld.png differ
