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();
}