Estoy desarrollando una aplicación en flash de realidad aumentada en la que quiero poner un swf delante de la cara de la persona que esta frente a la cámara web. Hasta aquí todo bien. El problema que tengo es que cuando aparece el swf delante de la cara cada vez que se detecta un movimiento se empieza a repetir una y otra vez por toda la pantalla en vez de mostrar el swf moviendose delante de la cara.
¿como podría hacer que el swf se moviese como lo haría un video o un 3d delate de un marker en vez de que el swf se duplique una y otra vez?
creo que le problema esta en las funciones detectionHndler y onInit.
Este es el código que utilizo:
Código ActionScript :
package {
import flash.display.*;
import flash.events.Event;
import flash.geom.*;
import flash.events.*;
import flash.net.*;
import jp.maaash.ObjectDetection.ObjectDetector;
import jp.maaash.ObjectDetection.ObjectDetectorEvent;
import jp.maaash.ObjectDetection.ObjectDetectorOptions;
import com.quasimondo.bitmapdata.CameraBitmap;
public class Main extends Sprite {
private var detector:ObjectDetector;
private var pizarra:Sprite;
private var camera:CameraBitmap;
private var detectionMap:BitmapData;
private var drawMatrix:Matrix;
private var scaleFactor:int = 4;
private var w:int = 640;
private var h:int = 480;
private var lastTimer:int = 0;
public function Main() {
iniciar();
iniciarDetector();
}
private function iniciar():void {
camera = new CameraBitmap(w, h);
camera.addEventListener( Event.RENDER, cameraReadyHandler );
addChild( new Bitmap( camera.bitmapData ) );
pizarra = Sprite(addChild(new Sprite()));
}
private function cameraReadyHandler( event:Event ):void {
detectionMap = new BitmapData( w / scaleFactor, h / scaleFactor, false, 0 );
detectionMap.draw(camera.bitmapData,new Matrix( 1/ scaleFactor, 0, 0, 1 / scaleFactor ),null,"normal",null,true);
detector.detect( detectionMap );
}
private function iniciarDetector():void {
detector = new ObjectDetector();
var opcionesDetector:ObjectDetectorOptions = new ObjectDetectorOptions();
opcionesDetector.min_size = 30;
detector.options = opcionesDetector;
detector.addEventListener(ObjectDetectorEvent.DETECTION_COMPLETE, detectionHandler );
}
private function detectionHandler( e :ObjectDetectorEvent ):void {
pizarra.graphics.clear();
if ( e.rects ) {
pizarra.graphics.lineStyle(2, 0xff0000);
e.rects.forEach( function( r :Rectangle, idx :int, arr :Array ) :void {
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.INIT, onInit);
var newContainer:Sprite = new Sprite();
newContainer.addChild(loader);
addChild(newContainer);
loader.load(new URLRequest("swf/cuadrado.swf"));
function onInit(event:Event):void {
event.target.content.x=r.x * scaleFactor;
event.target.content.y=r.y * scaleFactor;
event.target.content.width = r.width * scaleFactor;
event.target.content.height = r.height * scaleFactor;
}
});
}
}
}
} 