Flex RA aide multimarker multicollada
Bonsoir,
Après de longue recherches et essais, je viens cueillir une aide car malheureusement le temps pour moi commence à être très juste...
Je suis en école supérieure des beaux arts et je suis sur la réalisation d'une utilisation et détournement de la réalité augmentée.
Je me suis donc charger de motivation pour de nombreuses recherches afin de concevoir cela, j'ai découvert Flex ainsi que les librairies Flartoolkit, Papervision 3D et me suis mis à coder.
Résultat, j'ai bel est bien réussi à concevoir un marker, une camera et un objet collada donc 3D format Dae mais voila le problème :
Je souhaite pouvoir utiliser plusieurs marker ainsi que plusieurs models Dae anfin de pouvoir afficher face à la caméra une vingtaine de marker ayant sur chaque marker un objet 3D dae.
Voici mon code et ma demande est donc quelqu'un saurait-il m'éclairer ou m'aider rapidement pour que je puisse terminer cette phase de réalisation ?
Merci beaucoup de votre aide et patience. :)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
| package {
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import flash.media.Camera;
import flash.media.Video;
import flash.utils.ByteArray;
import org.libspark.flartoolkit.core.FLARCode;
import org.libspark.flartoolkit.core.param.FLARParam;
import org.libspark.flartoolkit.core.raster.rgb.FLARRgbRaster_BitmapData;
import org.libspark.flartoolkit.core.transmat.FLARTransMat;
import org.libspark.flartoolkit.core.transmat.FLARTransMatResult;
import org.libspark.flartoolkit.detector.FLARSingleMarkerDetector;
import org.libspark.flartoolkit.pv3d.FLARBaseNode;
import org.libspark.flartoolkit.pv3d.FLARCamera3D;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.render.LazyRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.objects.parsers.Collada;
import org.papervision3d.objects.parsers.DAE;
[SWF(width="640", height="480", frameRate="30", backgroundColor="#FFFFFF")]
public class FLARdemo2 extends Sprite
{
[Embed(source="camera_para.dat", mimeType="application/octet-stream")]
public var CameraParameters:Class;
[Embed(source="pat1.pat", mimeType="application/octet-stream")]
public var MarkerPattern:Class;
public var cameraParameters:FLARParam;
public var markerPattern:FLARCode;
public var raster:FLARRgbRaster_BitmapData;
public var detector:FLARSingleMarkerDetector;
public var cam:Camera;
public var vid:Video;
public var capture:BitmapData;
public var cam3D:FLARCamera3D;
public var scene3D:Scene3D;
public var viewPort:Viewport3D;
public var FLARdemo2Container:FLARBaseNode;
public var renderer:LazyRenderEngine;
public var trans:FLARTransMatResult;
public var prevSet:Boolean = false;
public var prevZ:Number = 0;
public var _collada:Collada;
public var _dae1: DAE;
public function FLARdemo2():void
{
cameraParameters = new FLARParam();
cameraParameters.loadARParam(new CameraParameters() as ByteArray);
markerPattern = new FLARCode(16, 16);
markerPattern.loadARPatt(new MarkerPattern());
cam = Camera.getCamera();
cam.setMode(640, 480, 30);
vid = new Video();
vid.width = 640;
vid.height = 480;
vid.attachCamera(cam);
addChild(vid);
capture = new BitmapData(vid.width, vid.height, false, 0x0);
capture.draw(vid);
raster = new FLARRgbRaster_BitmapData(capture);
detector = new FLARSingleMarkerDetector(cameraParameters, markerPattern, 80);
cam3D = new FLARCamera3D(cameraParameters);
scene3D = new Scene3D();
FLARdemo2Container = new FLARBaseNode();
scene3D.addChild(FLARdemo2Container);
viewPort = new Viewport3D(vid.width, vid.height);
viewPort.scaleX = viewPort.scaleY = 2;
addChild(viewPort);
renderer = new LazyRenderEngine(scene3D, cam3D, viewPort);
_dae1 = new DAE();
_dae1.load("model/monobjet.dae");
_dae1.scale = 2;
_dae1.rotationX = 90;
_dae1.rotationZ -= 90;
FLARdemo2Container.addChild(_dae1);
trans = new FLARTransMatResult();
this.addEventListener(Event.ENTER_FRAME, FLARdemo2Enter);
}
public function FLARdemo2Enter(e:Event):void
{
capture.draw(vid);
if (detector.detectMarkerLite(raster, 80) && detector.getConfidence() > 0.5)
{
detector.getTransformMatrix(trans);
FLARdemo2Container.setTransformMatrix(trans);
FLARdemo2Container.visible = true;
renderer.render();
}
else
{
FLARdemo2Container.visible = false;
renderer.render();
}
}
}
} |