26 mars 2010
5
26
/03
/mars
/2010
14:20
Nous voici arrivé à notre deuxième tutoriel, nous avons vu la dernière fois( Réalité Augmentée : La détection de mouvements. ) comment détecter de manière archaïque un mouvement en comparant 2 images consécutives.
Un petit aperçu d'une application de la R.A. avec cet exemple très épuré : Prestation : La Réalité Augmentée (Flash / Flex).
I/ Intéractions entre le mouvement et un objet.
Nous allons ici, récupérer le mouvement, puis lier celui-ci avec une action sur notre scène. bouton_1 est un MovieClip ajouté manuellement sur la scène.
package{
import flash.display.*;
import flash.events.*;
import flash.media.*;
import flash.geom.*;
import flash.utils.setInterval;
public class Main extends Sprite{
private var video:Video;
private var camera:Camera;
public function Main():void{
init();
initInterval();
}
private function init():void{
camera = Camera.getCamera();
camera.setMode(640,480,30); // setMode(largeur, hauteur, fps)
video = new Video(640,480);
video.attachCamera(camera);
addChild(video);
bouton_1.parent.setChildIndex(bouton_1, bouton_1.parent.numChildren - 1);
now = new BitmapData(camera.width, camera.height);
before = new BitmapData(camera.width, camera.height);
}
private function initInterval():void{
setInterval(detect, 100);
}
private var now:BitmapData;
private var before:BitmapData;
private function detect(e:Event = null):void{
if(!camera.muted){
now.draw(video);
now.draw(before, new Matrix(), new ColorTransform(), 'difference');
now.threshold(now, now.rect, new Point(0,0), '>', 0xFF111111, 0xFFFFFFFF);
before.draw(video);
actions(now);
}
}
private function actions(bmp:BitmapData):void{
//voir explications
var val = now.getPixel(bouton_1.x, bouton_1.y);
if(val > 1000000){
//ici vos actions pour ma part, je déplace aléatoirement le bouton
bouton_1.alpha = 0.2;
bouton_1.x = Math.floor(Math.random() * (530 - 50 + 1)) + 50;
bouton_1.y = Math.floor(Math.random() * (430 - 50 + 1)) + 50;
} else {
bouton_1.alpha = 1;
}
}
}
}
Nous avons vous dans le tutoriel précédent( La réalité augmentée ) que le mouvement se traduit par du blanc sur notre image. C'est donc ainsi que pour vérifier si notre objet est en "contact" avec le mouvement, il nous suffit de vérifier si le pixel étant aux coordonnées de notre objet est blanc ou non. La méthode est peu précise, mais il est aisé d'adapter le code pour le rendre plus fiable et précis ;).
Nous voici à la fin de ce deuxième tutoriel sur la détection de mouvements avec Flash.
Un petit aperçu d'une application de la R.A. avec cet exemple très épuré : Prestation : La Réalité Augmentée (Flash / Flex).
I/ Intéractions entre le mouvement et un objet.
Nous allons ici, récupérer le mouvement, puis lier celui-ci avec une action sur notre scène. bouton_1 est un MovieClip ajouté manuellement sur la scène.
Code Source
package{
import flash.display.*;
import flash.events.*;
import flash.media.*;
import flash.geom.*;
import flash.utils.setInterval;
public class Main extends Sprite{
private var video:Video;
private var camera:Camera;
public function Main():void{
init();
initInterval();
}
private function init():void{
camera = Camera.getCamera();
camera.setMode(640,480,30); // setMode(largeur, hauteur, fps)
video = new Video(640,480);
video.attachCamera(camera);
addChild(video);
bouton_1.parent.setChildIndex(bouton_1, bouton_1.parent.numChildren - 1);
now = new BitmapData(camera.width, camera.height);
before = new BitmapData(camera.width, camera.height);
}
private function initInterval():void{
setInterval(detect, 100);
}
private var now:BitmapData;
private var before:BitmapData;
private function detect(e:Event = null):void{
if(!camera.muted){
now.draw(video);
now.draw(before, new Matrix(), new ColorTransform(), 'difference');
now.threshold(now, now.rect, new Point(0,0), '>', 0xFF111111, 0xFFFFFFFF);
before.draw(video);
actions(now);
}
}
private function actions(bmp:BitmapData):void{
//voir explications
var val = now.getPixel(bouton_1.x, bouton_1.y);
if(val > 1000000){
//ici vos actions pour ma part, je déplace aléatoirement le bouton
bouton_1.alpha = 0.2;
bouton_1.x = Math.floor(Math.random() * (530 - 50 + 1)) + 50;
bouton_1.y = Math.floor(Math.random() * (430 - 50 + 1)) + 50;
} else {
bouton_1.alpha = 1;
}
}
}
}
Résultat Obtenu
Explications
Nous avons vous dans le tutoriel précédent( La réalité augmentée ) que le mouvement se traduit par du blanc sur notre image. C'est donc ainsi que pour vérifier si notre objet est en "contact" avec le mouvement, il nous suffit de vérifier si le pixel étant aux coordonnées de notre objet est blanc ou non. La méthode est peu précise, mais il est aisé d'adapter le code pour le rendre plus fiable et précis ;).
Nous voici à la fin de ce deuxième tutoriel sur la détection de mouvements avec Flash.