Package app

Source Code of app.SerLiquidoVisual

package app;



import java.awt.Cursor;
import java.awt.DisplayMode;
import java.awt.Frame;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.nio.FloatBuffer;
import java.util.Date;
import java.util.Random;

import javax.media.opengl.*;
import javax.media.opengl.glu.*;

import netP5.NetAddress;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

import oscP5.OscMessage;
import oscP5.OscP5;

import codeanticode.glgraphics.GLGraphics;
import codeanticode.glgraphics.GLTexture;
import codeanticode.glgraphics.GLTextureFilter;
import codeanticode.glgraphics.GLTextureWindow;





import processing.core.*;
import processing.opengl.*;
import remixlab.proscene.Camera;
import scenes.ElasticGrid;
import scenes.Grid;
import scenes.Scene;
import servers.WiiController;
import textures.FacesLoader;

import utils.Config;
import utils.ConsoleIO;

public class SerLiquidoVisual extends PApplet {



 
  public static void main(String[] args) {

    if(false) {      

      System.setProperty("apple.laf.useScreenMenuBar", "false");
      System.setProperty("apple.awt.fakefullscreen", "true");     
   
      PApplet.main(new String[] { "--present""app.SerLiquidoVisual" });
    } else{
      PApplet.main(new String[] { "app.SerLiquidoVisual" })
     
    }
  }


  ///////////////////////////////////////////////////////
  // CONFIGURACIONES:
  //
  ///////////////////////////////////////////////////////

  public static Logger logger = Logger.getLogger(SerLiquidoVisual.class);

  private static final long serialVersionUID = 1

  private Config config = new Config("data/visual.ini");

  ///////////////////////////////////////////////////////
  // GUI:
  /////////////////////////////////////////////////////// 

  //TODO USAR UNIVERSE !!!
 
  PFont OSD_FONT = createFont("Arial", 16)

  private int GUI_W = config.getIntParameter("GUI_W");
  private int GUI_H = config.getIntParameter("GUI_H");
  private int GUI_X = config.getIntParameter("GUI_X");
  private int GUI_Y = config.getIntParameter("GUI_Y");

  //////////////////////////////////////////////////////////////////////////////////////
  // OUTPUT
  //////////////////////////////////////////////////////////////////////////////////////

  private int OUTPUT_W = config.getIntParameter("OUTPUT_W")
  private int OUTPUT_H = config.getIntParameter("OUTPUT_H");
  private int OUTPUT_X = config.getIntParameter("OUTPUT_X");
  private int OUTPUT_Y = config.getIntParameter("OUTPUT_Y");
 
  private boolean FULLSCREEN;


  //////////////////////////////////////////////////////////////////////////////////////
  // TEXTURAS
  //////////////////////////////////////////////////////////////////////////////////////

  private GLTextureWindow     OUTPUT_WINDOW; 
  private GLTexture         OUTPUT_TEXTURE;

  private GLTexture         tex0;
  private GLTexture         nightShot;

  GLTextureFilter ns;
  GLTextureFilter dream;

  // aca voy a cargar las imagenes de las caras
  private FacesLoader faces;

  //////////////////////////////////////////////////////////////////////////////////////
  // CAMARA
  //////////////////////////////////////////////////////////////////////////////////////

  private Camera         OUTPUT_CAMERA;

  ///////////////////////////////////////////////////////
  // ESCENAS
  ///////////////////////////////////////////////////////

  private int currentScene = 1
  private ElasticGrid serLiquido ;

  ///////////////////////////////////////////////////////
  // VARIOS
  ///////////////////////////////////////////////////////

  private Random random = new Random();


  // TODO que lo levante del archivo de configuracion
  private OscP5 oscGateway;
  private int oscInputPort = 8600;
 
  private int oscCorePort = 7601;
  private NetAddress oscCoreLocation;
 
 
 

  public void setup(){

    PropertyConfigurator.configure("./data/logs/logger.properties");
    logger.info("CREATING PAPPLET");

    size(OUTPUT_W,OUTPUT_H, GLGraphics.GLGRAPHICS);
    frameRate(60);   
    frame.setLocation(GUI_X, GUI_Y)
    frame.setCursor(Cursor.CROSSHAIR_CURSOR);

    mySetup();

    oscInputPort = config.getIntParameter("oscInputPort");
   
    oscCorePort = config.getIntParameter("oscCorePort");   
    oscCoreLocation =  new NetAddress(config.getStringParameter("oscCoreIp"),  oscCorePort);
   
   
    oscGateway = new OscP5(this,oscInputPort);
   
    if(config.getBoolParameter("fullscreen")){   
      try {
     
        logger.info("ENTER FULLSCREEN");
       
        GraphicsDevice myGraphicsDevice = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
        myGraphicsDevice.setFullScreenWindow(frame)
     
      } catch (Exception e) { 
        e.printStackTrace();
        System.exit(0);
      }       
    }
  }


  void mySetup(){

    ////////////////////////////////////////////////////
    // OUTPUT
    /////////////////////////////////////////////////////

    logger.info("CREATING OUTPUT TEXTURE");

    OUTPUT_TEXTURE = new GLTexture(this, OUTPUT_W, OUTPUT_H);

    // a la ventana de salida yo solo le paso una textura
    // que funciona como canvas ya que luego
    // cada escena en particular me va a devolver una textura
    // de Opengl con la que puedo hacer distintas coas.
    //    logger.info("CREATING OUTPUT WINDOW");
    //
    //    OUTPUT_WINDOW = new GLTextureWindow(this, OUTPUT_X, OUTPUT_Y, OUTPUT_W, OUTPUT_H);
    //    OUTPUT_WINDOW.setTexture(OUTPUT_TEXTURE);
    //    OUTPUT_WINDOW.init();


    // Loading required filters.
    logger.info("LOADING TEXTURE FILTERS");
    ns = new GLTextureFilter(this, "./data/shaders/nigth.xml");
    tex0 = new GLTexture(this, OUTPUT_W, OUTPUT_H, GLTexture.FLOAT);


    dream = new GLTextureFilter(this, "./data/shaders/dream.xml");
    nightShot = new GLTexture(this, OUTPUT_W, OUTPUT_H, GLTexture.FLOAT);
    ////////////////////////////////////////////////////
    // setup escene
    /////////////////////////////////////////////////////
    logger.info("CREATING ESCENE: ELASTIC GRID");
    serLiquido = new ElasticGrid( (PApplet) this, OUTPUT_W, OUTPUT_H);           
    ((ElasticGrid) serLiquido).setup();


    //////////////////////////////////////////////////////////
    logger.info("CREATING FACE LOADER");
    faces = new FacesLoader(this);
    //textureLoader.importImages("/Users/diex/Documents/WORK/PROGRAMACION/EclipseWS/SerLiquido/imagenes/Claudio paul");


    //////////////////////////////////////////////////////////////////////////
    // CAMARA
    //////////////////////////////////////////////////////////////////////////

    // cuando creo la camara le paso false
    // para que no la asocie con la matriz de camara
    // que usa el PAPlet que uso como gui.   
    //    OUTPUT_CAMERA = new Camera(false, this);
    OUTPUT_CAMERA = new Camera(false, this);
    OUTPUT_CAMERA.centerScene();
   
   
    // engania pichanga
    faces.resetTextures();
    faces.importImages("./imagenes/" + "diego alberti");
    faces.importImages("./imagenes/" + "Madonna");
    faces.importImages("./imagenes/" + " ana paula rosso ");
    faces.importImages("./imagenes/" + "Alberto olmedo");
    faces.importImages("./imagenes/" + "einstein");
    faces.importImages("./imagenes/" + "eva duarte");
    faces.importImages("./imagenes/" + "Leo messi");
    faces.importImages("./imagenes/" + "Mona GIMENEZ");
    faces.importImages("./imagenes/" + "patricia valeria bermudez");

    flipFace();


  }

  ////////////////////////////////////////////////////
  // PROCESSING DRAW
  /////////////////////////////////////////////////////

  boolean canUpdateTextures = false;

  public void draw(){ 
   
   
    if(canUpdateTextures) {
      setFaces(name1, name2);
    }else{
   
    if(frameCount % 150 == 0) sendOSCMessage("/pingVisual",oscCoreLocation);

    background(0);
    fill(0);

    OUTPUT_CAMERA.setPosition(new PVector(-OUTPUT_W/2, -OUTPUT_H/2));

    //////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////
    // OUTPUT
    //////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////

 
    // TODO mecanismo para que el update de la escena corra en un thread
    serLiquido.noiseShake(frameCount , .5f );

    if(random(1) < 0.005f){
      if(faces.hasFaces()) flipFace();
    }

    serLiquido.update();
   
    // transformaciones
    serLiquido.setScale(70f);   
    serLiquido.setPosition(new PVector(0,1,0));

    serLiquido.pitch(PI);

    // le paso una camara
    serLiquido.cameraFeed(OUTPUT_CAMERA);

    // dibujo
    serLiquido.draw();

    // capturo la textura y la paso al viewport
    // dream.apply(serLiquido.getTexture(), tex1);
    ns.apply(serLiquido.getTexture() , nightShot );
    OUTPUT_TEXTURE.copy(nightShot);

   
    image(OUTPUT_TEXTURE,0,0);

    ////////////////////////////////////////////////////
    // DEBUG
    /////////////////////////////////////////////////////
   
    }
  }

 
  public void sendOSCMessage(String message, NetAddress dest){
   
    OscMessage myMessage = new OscMessage(message);     
    oscGateway.send(myMessage, oscCoreLocation);
 
  }


  public void stop() {
    super.stop();
  }


  String name1;
  String name2;

  void oscEvent(OscMessage theOscMessage) {

    /* check if theOscMessage has the address pattern we are looking for. */
    logger.info("RECEIVED OSC EVENT: "+ theOscMessage.addrPattern() + " : " +theOscMessage.typetag());

    if(theOscMessage.checkAddrPattern("/visitorReady")){   

      name1 = theOscMessage.get(0).stringValue();
      name2 = theOscMessage.get(1).stringValue();

      canUpdateTextures = true;
    }


  }

  public void setFaces(String name1, String name2){

    logger.info("RESETING FACES POOL");
    faces.resetTextures();
    logger.info("LOADING FACES FOR: "+ name1);
    faces.importImages("./imagenes/" + name1);
    logger.info("LOADING FACES FOR: "+ name2);
    faces.importImages("./imagenes/" + name2);

    canUpdateTextures = false;
  }


  public void flipFace(){

    int id = (int) random(1 , faces.getSize() - 1);   
    logger.info("FLIP FACE: ID ="+id+" faces.size="+ faces.getSize() );
    serLiquido.setTexture(faces.getImage(id));
  }

  ////////////////////////////////////////////////////
  // KEYBOARD MAPPING
  /////////////////////////////////////////////////////


  int id = 0;

 
 
  public void keyPressed(){

    if( key == 'r') {

      faces.resetTextures();
      faces.importImages("./imagenes/" + "Diego alberti");
      faces.importImages("./imagenes/" + "Madonna");

    }



    if( key == 's') serLiquido.shake(-1);
    if( key == 'b') serLiquido.flock(-1);

    if( key == ']'){
      id = (id + 1) % faces.getSize();
      serLiquido.setTexture(faces.getImage(id));
    }
    if( key == '['){
      id = abs( (id - 1) % faces.getSize());
      serLiquido.setTexture(faces.getImage(id));
    }





    //    scene[currentScene].keyPressed(key);

    //  if(key == 'r' || key == 'R') serLiquido.setup();

    if(key == 's' || key == 'S') {
      System.out.println("SAVING");
    }

    if(key == 'o' || key == 'O') {
      //      millis   = 0;
      System.out.println("MILLIS 0");
    }

    if(key == ' '){
      long d = System.nanoTime();
      //    saveFrame(d + "_.jpg");
      println("SAVED : " + d + "_.jpg" );
    }
  }
}
TOP

Related Classes of app.SerLiquidoVisual

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.