Skip to content
Snippets Groups Projects
grid32x16z_red.pde 2.84 KiB
Newer Older
  • Learn to ignore specific revisions
  • OPC opc;
    PShader blur;
    PGraphics src;
    PGraphics pass1, pass2;
    
    void setup()
    {
      size(640, 320, P2D);
    
      blur = loadShader("blur.glsl");
      blur.set("blurSize", height / 8);
    
    Micah Elizabeth Scott's avatar
    Micah Elizabeth Scott committed
      blur.set("sigma", 10.0f);  
    
      
      src = createGraphics(width, height, P3D); 
      
      pass1 = createGraphics(width, height, P2D);
      pass1.noSmooth();  
      
      pass2 = createGraphics(width, height, P2D);
      pass2.noSmooth();
    
      // Connect to the local instance of fcserver. You can change this line to connect to another computer's fcserver
      opc = new OPC(this, "127.0.0.1", 7890);
    
      opc.ledGrid8x8(0 * 64, width * 1/8, height * 1/4, height/16, 0, true);
      opc.ledGrid8x8(1 * 64, width * 3/8, height * 1/4, height/16, 0, true);
      opc.ledGrid8x8(2 * 64, width * 5/8, height * 1/4, height/16, 0, true);
      opc.ledGrid8x8(3 * 64, width * 7/8, height * 1/4, height/16, 0, true);
      opc.ledGrid8x8(4 * 64, width * 1/8, height * 3/4, height/16, 0, true);
      opc.ledGrid8x8(5 * 64, width * 3/8, height * 3/4, height/16, 0, true);
      opc.ledGrid8x8(6 * 64, width * 5/8, height * 3/4, height/16, 0, true);
      opc.ledGrid8x8(7 * 64, width * 7/8, height * 3/4, height/16, 0, true);
    
      
      float stripSpacing = 2;
      float stripX = width * 0.35;
      float stripY = height * 0.5;
      opc.ledStrip(8 * 64, 64, stripX, stripY, stripSpacing, 0, false);
      stripX += stripSpacing * 64;
      opc.ledStrip(9 * 64, 64, stripX, stripY, stripSpacing, 0, false);
      stripX += stripSpacing * 64;
      opc.ledStrip(10 * 64, 64, stripX, stripY, stripSpacing, 0, false);
    
    
      // Make the status LED quiet
      opc.setStatusLed(false);
    }
    
    void draw()
    {
      float t = millis() * 0.001;
      randomSeed(0);
      
      src.beginDraw();
      src.noStroke();
    
    Micah Elizabeth Scott's avatar
    Micah Elizabeth Scott committed
      src.background(255, 0, 0);
    
      src.fill(255, 150);
      src.blendMode(NORMAL);
    
    
      src.directionalLight(255, 255, 255, -1, 0, 0.4);
    
      src.directionalLight(50, 50, 50, -1, 0, 0.2);
      src.directionalLight(50, 50, 50, -1, 0, 0);
    
    Micah Elizabeth Scott's avatar
    Micah Elizabeth Scott committed
      src.directionalLight(255, 0, 0, 1, 0, 0);
    
      for (int i = 0; i < 80; i++) {
    
    
        // This part is the chaos demon.
        src.translate(map(noise(random(1000), t * 0.07), 0, 1, -width, width*2),
          map(noise(random(1000), t * 0.07), 0, 1, -height, height*2), 0);
    
        // Progression of time
        src.rotateY(t * 0.4 + randomGaussian());
    
    Micah Elizabeth Scott's avatar
    Micah Elizabeth Scott committed
        src.rotateX(t * 0.122222 + randomGaussian());
    
    Micah Elizabeth Scott's avatar
    Micah Elizabeth Scott committed
        src.box(height * abs(0.2 + 0.2 * randomGaussian()));
    
      // Brighten if we care
      /*
      src.noLights();
      src.blendMode(ADD);
      src.fill(40, 0, 0);
      src.rect(0, 0, width, height);
      */
    
    
      // Separable blur filter
      src.endDraw();
    
      blur.set("horizontalPass", 0);
      pass1.beginDraw();            
      pass1.shader(blur);  
      pass1.image(src, 0, 0);
      pass1.endDraw();
      
      blur.set("horizontalPass", 1);
      pass2.beginDraw();            
      pass2.shader(blur);  
      pass2.image(pass1, 0, 0);
      pass2.endDraw();    
            
      image(pass2, 0, 0);
    }