Add cubic gamma correction on brightness
authorMark Slee <mcslee@Mark-Slees-MacBook-Pro.local>
Thu, 22 Aug 2013 09:13:01 +0000 (02:13 -0700)
committerMark Slee <mcslee@Mark-Slees-MacBook-Pro.local>
Thu, 22 Aug 2013 09:13:01 +0000 (02:13 -0700)
MarkSlee.pde
TestPatterns.pde
_Internals.pde
_Mappings.pde

index 68d8de143f334e81c41b3317ff9f9286f586ef4e..a67f719de99eadc90367791df291c75149e682d9 100644 (file)
@@ -705,3 +705,32 @@ class Traktor extends SCPattern {
     }
   }
 }
+
+class ColorFuckerEffect extends SCEffect {
+  
+  BasicParameter hueShift = new BasicParameter("HSHFT", 0);
+  BasicParameter sat = new BasicParameter("SAT", 1);  
+  BasicParameter bright = new BasicParameter("BRT", 1);
+  
+  ColorFuckerEffect(GLucose glucose) {
+    super(glucose);
+    addParameter(hueShift);
+    addParameter(bright);
+    addParameter(sat);    
+  }
+  
+  public void doApply(int[] colors) {
+    float bMod = bright.getValuef();
+    float sMod = sat.getValuef();
+    float hMod = hueShift.getValuef();
+    if (bMod < 1 || sMod < 1 || hMod > 0) {    
+      for (int i = 0; i < colors.length; ++i) {
+        colors[i] = color(
+          (hue(colors[i]) + hueShift.getValuef()*360.) % 360,
+          saturation(colors[i]) * sat.getValuef(),
+          brightness(colors[i]) * bright.getValuef()
+        );
+      }
+    }
+  }
+}
index ab90d21effa4316d26a27312a36d4bc00edeb411..b2e49f1d129bcacdfd81985825951828b0cd7fec 100644 (file)
@@ -259,30 +259,6 @@ class TestProjectionPattern extends TestPattern {
   } 
 }
 
-class ColorFuckerEffect extends SCEffect {
-  
-  BasicParameter hueShift = new BasicParameter("HSHFT", 0);
-  BasicParameter sat = new BasicParameter("SAT", 1);  
-  BasicParameter bright = new BasicParameter("BRT", 1);
-  
-  ColorFuckerEffect(GLucose glucose) {
-    super(glucose);
-    addParameter(hueShift);
-    addParameter(bright);
-    addParameter(sat);    
-  }
-  
-  public void doApply(int[] colors) {
-    for (int i = 0; i < colors.length; ++i) {
-      colors[i] = color(
-        (hue(colors[i]) + hueShift.getValuef()*360.) % 360,
-        saturation(colors[i]) * sat.getValuef(),
-        brightness(colors[i]) * bright.getValuef()
-      );
-    }
-  }
-}
-
 class TestCubePattern extends TestPattern {
   
   private SawLFO index = new SawLFO(0, Cube.POINTS_PER_CUBE, Cube.POINTS_PER_CUBE*60);
index 8b2e3da71afa4e408845f78669dace1f2a580e82..a358f1b3202a94fd15c104314d51500a0ddcce80 100644 (file)
@@ -204,9 +204,16 @@ void draw() {
     debugUI.draw();
   }
   
-  // TODO(dan): if you want to, here would be a good place to
-  // put in gamma correction, modifying the colors that get
-  // sent to the pandaboards, without mucking up the UI here
+  // Gamma correction here. Apply a cubic to the brightness
+  // for better representation of dynamic range
+  for (int i = 0; i < colors.length; ++i) {
+    float b = brightness(colors[i]) / 100.f;
+    colors[i] = color(
+      hue(colors[i]),
+      saturation(colors[i]),
+      (b*b*b) * 100.
+    );
+  }
   
   // TODO(mcslee): move into GLucose engine
   for (PandaDriver p : pandaBoards) {
index 01aaa2a3927590166e971ae71a97e6012d10978b..3932f0b9fecf53581ed524bd13d0f9d81facc19c 100644 (file)
@@ -124,17 +124,22 @@ public PandaMapping[] buildPandaList() {
   return new PandaMapping[] {
     new PandaMapping(
       "10.200.1.29", new ChannelMapping[] {
-        new ChannelMapping(),
-        new ChannelMapping(),
-        new ChannelMapping(),
-        new ChannelMapping(),
-        new ChannelMapping(),
-        new ChannelMapping(),
-        new ChannelMapping(),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
         new ChannelMapping(ChannelMapping.MODE_BASS),
         new ChannelMapping(ChannelMapping.MODE_STRUTS_AND_FLOOR),
         new ChannelMapping(ChannelMapping.MODE_SPEAKER, LEFT_SPEAKER),
         new ChannelMapping(ChannelMapping.MODE_SPEAKER, RIGHT_SPEAKER),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
+        new ChannelMapping(ChannelMapping.MODE_CUBES, new int[] { 1, 2, 3, 4 }),
     }),
 
     new PandaMapping(