commit 04fe7f803ec13e6d3930ca7b46423f61796147f0
Author: Leszek Koltunski <leszek@distoretedandroid.org>
Date:   Thu Nov 17 12:56:37 2016 +0000

    Around The World: implement blackness

diff --git a/src/main/java/org/distorted/examples/aroundtheworld/AroundTheWorldEffectsManager.java b/src/main/java/org/distorted/examples/aroundtheworld/AroundTheWorldEffectsManager.java
index 4352449..1ae14ea 100644
--- a/src/main/java/org/distorted/examples/aroundtheworld/AroundTheWorldEffectsManager.java
+++ b/src/main/java/org/distorted/examples/aroundtheworld/AroundTheWorldEffectsManager.java
@@ -40,52 +40,94 @@ class AroundTheWorldEffectsManager
   // WHITENESS
   // Vertex effects:
   // a) make the lips smaller (SINK)
-  private Static4D wRegionLips;
-  private Static3D wCenterLips;
+  private Static4D wLipsRegion;
+  private Static3D wLipsCenter;
   private Static1D wLipsFactor;
   private Dynamic1D wLipsDyn;
 
   // ASIANNESS
   // Vertex Effects:
   // a) move lips & nose higher (DISTORT)
-  private Static4D aRegionLipsNose;
-  private Static3D aCenterLipsNose;
+  private Static4D aLipsNoseRegion;
+  private Static3D aLipsNoseCenter;
   private Static3D aLipsNoseFactor;
   private Dynamic3D aLipsNoseDyn;
   // b) make the nose broader (PINCH)
-  private Static4D aRegionNoseBroader;
-  private Static3D aCenterNoseBroader;
+  private Static4D aNoseBroaderRegion;
+  private Static3D aNoseBroaderCenter;
   private Static2D aNoseBroaderFactor;
   private Dynamic2D aNoseBroaderDyn;
   // c) make the nostrils more visible (DISTORT)
-  private Static4D aRegionNostrils;
-  private Static3D aCenterNostrils;
+  private Static4D aNostrilsRegion;
+  private Static3D aNostrilsCenter;
   private Static3D aNostrilsFactor;
   private Dynamic3D aNostrilsDyn;
   // d) rotate eyes (2 x SWIRL)
-  private Static4D aRegionEyes;
-  private Static3D aCenterLEye, aCenterREye;
+  private Static4D aEyesRegion;
+  private Static3D aLEyeCenter, aREyeCenter;
   private Static1D aLEyeFactor, aREyeFactor;
   private Dynamic1D aLEyeDyn, aREyeDyn;
   // e) move eyebrow higher (DISTORT)
-  private Static4D aRegionEyebrows;
-  private Static3D aCenterEyebrows;
+  private Static4D aEyebrowsRegion;
+  private Static3D aEyebrowsCenter;
   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 Static4D aSkinColorRegion;
   private Static3D aChromaSkin;
   private Static1D aChromaSkinFactor;
   private Dynamic1D aChromaSkinDyn;
   // b) darken both eyes (2 x SMOOTH_CHROMA)
-  private Static4D aRegionLEyeColor, aRegionREyeColor;
+  private Static4D aLEyeColorRegion, aREyeColorRegion;
   private Static3D aChromaEyes;
   private Static1D aChromaEyesFactor;
   private Dynamic1D aChromaEyesDyn;
 
   // BLACKNESS
+  // Vertex Effects
+  // a) make the whole face broader (PINCH)
+  private Static4D bFaceRegion;
+  private Static3D bFaceCenter;
+  private Static2D bFaceFactor;
+  private Dynamic2D bFaceDyn;
+  // b) tip of the nose lower (DISTORT)
+  private Static4D bTipLowerRegion;
+  private Static3D bTipLowerCenter;
+  private Static3D bTipLowerFactor;
+  private Dynamic3D bTipLowerDyn;
+  // c) broaden the whole nose: (PINCH)
+  private Static4D bWholeNoseRegion;
+  private Static3D bWholeNoseCenter;
+  private Static2D bWholeNoseFactor;
+  private Dynamic2D bWholeNoseDyn;
+  // d) broaden the tip of the nose some more: (PINCH)
+  private Static4D bNoseBroaderRegion;
+  private Static3D bNoseBroaderCenter;
+  private Static2D bNoseBroaderFactor;
+  private Dynamic2D bNoseBroaderDyn;
+  // 3) make lips higher: (PINCH)
+  private Static4D bLipsRegion;
+  private Static3D bLipsCenter;
+  private Static2D bLipsFactor;
+  private Dynamic2D bLipsDyn;
+  // Fragment effects
+  // a) make the whole face darker (CHROMA)
+  private Static4D bSkinColorRegion;
+  private Static3D bChromaSkin;
+  private Static1D bChromaSkinFactor;
+  private Dynamic1D bChromaSkinDyn;
+  // b) move both eyes back to whiteness (2 x SMOOTH CHROMA)
+  private Static4D bLEyeColorRegion, bREyeColorRegion;
+  private Static3D bChromaEyes;
+  private Static1D bChromaEyesFactor;
+  private Dynamic1D bChromaEyesDyn;
+  // c) darken both pupils (2 x SMOOTH_CHROMA)
+  private Static4D bLPupilColorRegion, bRPupilColorRegion;
+  private Static3D bChromaPupil;
+  private Static1D bChromaPupilFactor;
+  private Dynamic1D bChromaPupilDyn;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -97,35 +139,35 @@ class AroundTheWorldEffectsManager
 
     // WHITENESS
     // Vertex Effects
-    wRegionLips = new Static4D(0,0,100,100);
-    wCenterLips = new Static3D(300,500,0);
+    wLipsRegion = new Static4D(0,0,100,100);
+    wLipsCenter = 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);
+    aLipsNoseRegion    = new Static4D(0,0,267,267);
+    aLipsNoseCenter    = 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);
+    aNoseBroaderRegion = new Static4D(0,0,130,130);
+    aNoseBroaderCenter = 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);
+    aNostrilsRegion    = new Static4D(0,0,60,60);
+    aNostrilsCenter    = 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);
+    aEyesRegion        = new Static4D(0,0,83,83);
+    aLEyeCenter        = new Static3D(176,230,0);
+    aREyeCenter        = new Static3D(420,230,0);
     aLEyeDyn           = new Dynamic1D();
     aREyeDyn           = new Dynamic1D();
     aLEyeFactor        = new Static1D(0);
@@ -133,16 +175,16 @@ class AroundTheWorldEffectsManager
     aLEyeDyn.add(aLEyeFactor);
     aREyeDyn.add(aREyeFactor);
 
-    aRegionEyebrows    = new Static4D(0,0,142,142);
-    aCenterEyebrows    = new Static3D(300,100,0);
+    aEyebrowsRegion    = new Static4D(0,0,142,142);
+    aEyebrowsCenter    = 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,230,29,25);
-    aRegionREyeColor   = new Static4D(423,230,29,25);
+    aSkinColorRegion   = new Static4D(300,300,600,600);
+    aLEyeColorRegion   = new Static4D(172,230,29,25);
+    aREyeColorRegion   = new Static4D(423,230,29,25);
 
     aChromaSkin        = new Static3D(0.5f, 0.5f, 0.5f);
     aChromaEyes        = new Static3D(0.5f, 0.14f, 0.14f);
@@ -153,6 +195,59 @@ class AroundTheWorldEffectsManager
     aChromaSkinDyn.add(aChromaSkinFactor);
     aChromaEyesDyn = new Dynamic1D();
     aChromaEyesDyn.add(aChromaEyesFactor);
+
+    // BLACKNESS
+    // Vertex Effects
+    bFaceRegion        = new Static4D(0,0,600,600);
+    bFaceCenter        = new Static3D(300,300,0);
+    bFaceFactor        = new Static2D(1.0f,90.0f);
+    bFaceDyn           = new Dynamic2D();
+    bFaceDyn.add(bFaceFactor);
+
+    bTipLowerRegion    = new Static4D(0,0,41,41);
+    bTipLowerCenter    = new Static3D(300,393,0);
+    bTipLowerFactor    = new Static3D(0,0,0);
+    bTipLowerDyn       = new Dynamic3D();
+    bTipLowerDyn.add(bTipLowerFactor);
+
+    bWholeNoseRegion   = new Static4D(0,0,130,130);
+    bWholeNoseCenter   = new Static3D(300,357,0);
+    bWholeNoseFactor   = new Static2D(1.0f,90.0f);
+    bWholeNoseDyn      = new Dynamic2D();
+    bWholeNoseDyn.add(bWholeNoseFactor);
+
+    bNoseBroaderRegion = new Static4D(0,0,95,95);
+    bNoseBroaderCenter = new Static3D(300,408,0);
+    bNoseBroaderFactor = new Static2D(1.0f,90.0f);
+    bNoseBroaderDyn    = new Dynamic2D();
+    bNoseBroaderDyn.add(bNoseBroaderFactor);
+
+    bLipsRegion        = new Static4D(0,96,118,118);
+    bLipsCenter        = new Static3D(300,458,0);
+    bLipsFactor        = new Static2D(1.0f,0.0f);
+    bLipsDyn           = new Dynamic2D();
+    bLipsDyn.add(bLipsFactor);
+
+    // Fragment Effects
+    bSkinColorRegion   = new Static4D(300,300,600,600);
+    bLEyeColorRegion = new Static4D(158,241,55,24);
+    bREyeColorRegion = new Static4D(436,241,55,24);
+    bLPupilColorRegion   = new Static4D(166,230,28,23);
+    bRPupilColorRegion   = new Static4D(431,230,28,23);
+
+    bChromaSkin        = new Static3D(0.66f, 0.4f, 0.5f);
+    bChromaEyes        = new Static3D(1.0f, 1.0f, 1.0f);
+    bChromaPupil       = new Static3D(0.5f, 0.14f, 0.14f);
+    bChromaSkinFactor  = new Static1D(0.0f);
+    bChromaPupilFactor = new Static1D(0.0f);
+    bChromaEyesFactor  = new Static1D(0.0f);
+
+    bChromaSkinDyn = new Dynamic1D();
+    bChromaSkinDyn.add(bChromaSkinFactor);
+    bChromaEyesDyn = new Dynamic1D();
+    bChromaEyesDyn.add(bChromaEyesFactor);
+    bChromaPupilDyn = new Dynamic1D();
+    bChromaPupilDyn.add(bChromaPupilFactor);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -162,21 +257,32 @@ class AroundTheWorldEffectsManager
     setRace(mBlackness, mAsianness);
 
     // WHITENESS
-    obj.sink(wLipsDyn, wCenterLips, wRegionLips);
+    obj.sink(wLipsDyn, wLipsCenter, wLipsRegion);
 
     // 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.distort(aLipsNoseDyn, aLipsNoseCenter, aLipsNoseRegion);
+    obj.pinch(aNoseBroaderDyn, aNoseBroaderCenter, aNoseBroaderRegion);
+    obj.distort(aNostrilsDyn, aNostrilsCenter, aNostrilsRegion);
+    obj.swirl(aLEyeDyn, aLEyeCenter, aEyesRegion);
+    obj.swirl(aREyeDyn, aREyeCenter, aEyesRegion);
+    obj.distort(aEyebrowsDyn, aEyebrowsCenter, aEyebrowsRegion);
 
-    obj.chroma(aChromaSkinDyn, aChromaSkin, aRegionSkinColor, false);
-    obj.chroma(aChromaEyesDyn, aChromaEyes, aRegionLEyeColor, true);
-    obj.chroma(aChromaEyesDyn, aChromaEyes, aRegionREyeColor, true);
+    obj.chroma(aChromaSkinDyn, aChromaSkin, aSkinColorRegion, false);
+    obj.chroma(aChromaEyesDyn, aChromaEyes, aLEyeColorRegion, true);
+    obj.chroma(aChromaEyesDyn, aChromaEyes, aREyeColorRegion, true);
 
     // BLACKNESS
+    obj.pinch(bFaceDyn, bFaceCenter, bFaceRegion);
+    obj.distort(bTipLowerDyn, bTipLowerCenter, bTipLowerRegion);
+    obj.pinch(bWholeNoseDyn, bWholeNoseCenter, bWholeNoseRegion);
+    obj.pinch(bNoseBroaderDyn, bNoseBroaderCenter, bNoseBroaderRegion);
+    obj.pinch(bLipsDyn, bLipsCenter, bLipsRegion);
+
+    obj.chroma(bChromaSkinDyn, bChromaSkin, bSkinColorRegion, false);
+    obj.chroma(bChromaEyesDyn, bChromaEyes, bLEyeColorRegion, true);
+    obj.chroma(bChromaEyesDyn, bChromaEyes, bREyeColorRegion, true);
+    obj.chroma(bChromaPupilDyn, bChromaPupil, bLPupilColorRegion, true);
+    obj.chroma(bChromaPupilDyn, bChromaPupil, bRPupilColorRegion, true);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -184,8 +290,8 @@ class AroundTheWorldEffectsManager
   synchronized void setRace(float blackness, float asianness)
     {
     mWhiteness = 1 - blackness - asianness;
-    mBlackness = blackness;
     mAsianness = asianness;
+    mBlackness = blackness;
 
     //android.util.Log.e("manager", "blackness="+blackness+" asianness="+asianness);
 
@@ -204,5 +310,14 @@ class AroundTheWorldEffectsManager
     aChromaEyesFactor.set(0.7f*mAsianness);
 
     // BLACKNESS
+    bFaceFactor.set1(1.0f + 0.1f*mBlackness);
+    bTipLowerFactor.set2(23.0f*mBlackness);
+    bWholeNoseFactor.set1(1.0f+0.5f*mBlackness);
+    bNoseBroaderFactor.set1(1.0f+0.38f*mBlackness);
+    bLipsFactor.set1(1.0f+1.0f*mBlackness);
+
+    bChromaSkinFactor.set(0.55f*mBlackness);
+    bChromaEyesFactor.set(0.35f*mBlackness);
+    bChromaPupilFactor.set(0.7f*mBlackness);
     }
   }
diff --git a/src/main/java/org/distorted/examples/aroundtheworld/AroundTheWorldRenderer.java b/src/main/java/org/distorted/examples/aroundtheworld/AroundTheWorldRenderer.java
index e9c9a1b..341244a 100644
--- a/src/main/java/org/distorted/examples/aroundtheworld/AroundTheWorldRenderer.java
+++ b/src/main/java/org/distorted/examples/aroundtheworld/AroundTheWorldRenderer.java
@@ -54,7 +54,7 @@ class AroundTheWorldRenderer implements GLSurfaceView.Renderer
       mEffects = new AroundTheWorldEffectsManager();
 
       Distorted.setMaxVertex(12);
-      Distorted.setMaxFragment(3);
+      Distorted.setMaxFragment(8);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
