Outils pour utilisateurs


3d Dynamique

Ici une camera virtuel est passé dans un décor 3d symbolisé par des cubes. Pour rendre l'image plus vivante j' ai imaginé que la camera virtuel pourrais ce déplacer en fonction de ma tête. Pour ce faire une webcam est placé sur l' écran, j' utilise la librairie OpenCV et le Haar “Frontaleface” pour déterminé la position de ma tête face a l'écran et j' adapte ces coordonnées a la camera virtuel. Il y a sans doute une multitude de façon de traité le reste , lib. spéciale camera virtuel ou encore une lib. pour charger directement les fichiers 3Ds, blender, et autre mais le passage par OpenCV est le plus simple que j'ai trouvé .

L'extension Adobe Flash est nécessaire pour afficher ce contenu.

Le Code

3dDynamique.pde
//-*-zebulon-*-
import hypermedia.video.*;
import java.awt.Rectangle;
 
 
OpenCV opencv;
//PImage a;
//PImage b;
//PImage c;
//PImage d;
 
// contrast/brightness values
int contrast_value    = 0;
int brightness_value  = 0;
 
int fx = 0;
int fy = 0;
int fz = 0;
 
 
void setup() {
 
    size( 500, 300, P3D );
  //  a = loadImage ( "damier.jpg");
    //b = loadImage ( "b.png");
    //c = loadImage ( "c.jpg");
    //d = loadImage ( "d.png");
 
 
    opencv = new OpenCV( this );
    opencv.capture( width, height );                   // open video stream
    opencv.cascade( OpenCV.CASCADE_FRONTALFACE_ALT );  // load detection description, here-> front face detection : "haarcascade_frontalface_alt.xml"
 
 
    // print usage
    println( "Drag mouse on X-axis inside this sketch window to change contrast" );
    println( "Drag mouse on Y-axis inside this sketch window to change brightness" );
 
}
 
 
public void stop() {
    opencv.stop();
    super.stop();
}
 
 
 
void draw() {
 
    // grab a new frame
    // and convert to gray
    opencv.read();
    opencv.convert( GRAY );
    opencv.contrast( contrast_value );
    opencv.brightness( brightness_value );
 
    // proceed detection
    Rectangle[] faces = opencv.detect( 1.2, 2, OpenCV.HAAR_DO_CANNY_PRUNING, 40, 40 );
 
    // display the image
    //image( opencv.image(), 0, 0,80, 60 );
 
    // draw face area(s)
    noFill();
    stroke(255,0,0);
    for( int i=0; i<faces.length; i++ ) {
        rect( faces[i].x, faces[i].y, faces[i].width, faces[i].height ); 
        print ("x");
        println (faces[i].x+faces[i].width/2) ;
        println (faces[i].height/2) ;
        fx = faces[i].x+faces[i].width/2 ;
        fy = faces[i].y+faces[i].height/2 ;
        fz = faces[i].height*2;
        camera(fx-250, fy-150, -400, 0.0, 0.0, 30000.0, 0.0, 1.0, 0.0);
        //camera(fx-250, fy-150, -600+fz, 0.0, 0.0, 30000.0, 0.0, 1.0, 0.0);
    }
    background(204);
    //translate (250,150,0);
   // image( opencv.image(), -40, -30, 80, 60 );
    //translate (0,1000, 1000); 
    //rotateX (PI/2.0);
    //image ( a, -1500, 0, 3000, 3000);
    //rotateX (-PI/2.0);
    //translate (0, -1000, -800);
    translate (150,150,0);
    box (65);
    translate (-300,0,0);
    box (65);
    translate (0,-300,0);
    box (65);
    translate (300,0,0);
    box (65);
    translate (0,0,300);
    box (65);
    translate (-300,0,0);
    box (65);
    translate (0,300,0);
    box (65);
    translate (300,0,0);
    box (65);
 
 
}
 
 
 
/**
 * Changes contrast/brigthness values
 */
void mouseDragged() {
    contrast_value   = (int) map( mouseX, 0, width, -128, 128 );
    brightness_value = (int) map( mouseY, 0, width, -128, 128 );
}