Processing con libreria TUIO e video con canale alpha

di il
0 risposte

Processing con libreria TUIO e video con canale alpha

Salve a tutti,
mi sto avvicinando ora a processing e in generale alla programmazone. Ho un sketch dove ci sto impazzendo.
Utilizzo la libreria tuio. Quando un marker esce dalla zona viene applicato un effetto al video.
L'effetto flipVideo viene avviato correttamente, il problema è con showOverlay, dove un video mov con trasparenza viene sovrapposto a quello in "background".
Sapete dirmi come mai non viene visualizzato? temo il problema sia nel image(overlayVideo, 0, 0); o addirittura in tutta la struttura del codice.
grazie mille!

import TUIO.*;
import processing.video.*;

TuioProcessing tuioClient;

boolean showOverlay = false;
boolean flipVideo = false;
boolean videoLoaded = false;
Movie video;
Movie overlayVideo;


void setup() {
  size(600, 352);
  frameRate(30);

  video = new Movie(this, "movie.mov");
  overlayVideo  = new Movie(this, "overlay.mov");

  tuioClient = new TuioProcessing(this);

  video.loop();
  overlayVideo.loop();
  
}


void movieEvent(Movie video) {
  video.read();  
}
void movieEvent2(Movie overlayVideo) {
  overlayVideo.read();
}

void draw() {
  
  background(0);
  loadPixels();
  video.loadPixels();
  overlayVideo.loadPixels();

 if (showOverlay) {
    PImage overlayVideo = video.get(); // Create a copy of the video frame
    overlayVideo.mask(video);   // Apply overlay as a mask
      image(overlayVideo, 0, 0);  // Display masked video
  } 
    
  if (flipVideo) {
    video.pixels = flipPixels(video.pixels);
  }
  
 image(video, 0, 0);
 image(overlayVideo, 0, 0);
  
  video.updatePixels();
 
}

int[] flipPixels(int[] pixels) {
  int[] flippedPixels = new int[pixels.length];
  int width = video.width;

  for (int y = 0; y < video.height; y++) {
    for (int x = 0; x < video.width; x++) {
      flippedPixels[y * width + x] = pixels[y * width + (width - x - 1)];
    }
  }

  return flippedPixels;
}

void addTuioObject(TuioObject tobj) {
  println("Marker aggiunto: " + tobj.getSymbolID());
  if (tobj.getSymbolID() == 0) {
    showOverlay = false;
  } else if (tobj.getSymbolID() == 1) {
    flipVideo = false;
  }
}

void removeTuioObject(TuioObject tobj) {
  println("Marker rimosso: " + tobj.getSymbolID());
  if (tobj.getSymbolID() == 0) {
    showOverlay = true;
  } else if (tobj.getSymbolID() == 1) {
    flipVideo = true;
  }
}

void updateTuioObject(TuioObject tobj) {
  println("Marker aggiornato: " + tobj.getSymbolID());
}

void keyPressed() {
  if (key == 'r' || key == 'R') {
    tuioClient.stop();
    tuioClient = new TuioProcessing(this);
    tuioClient.stop();
  }
}

void stop() {
  video.stop();
  video.dispose();
  overlayVideo.stop();
  overlayVideo.dispose();
  tuioClient.stop();

  super.stop();
}
Devi accedere o registrarti per scrivere nel forum
0 risposte