package { import flash.display.BitmapData; import flash.display.Sprite; import flash.events.*; import flash.media.Camera; import flash.media.Video; import flash.utils.*; 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.FLARTransMatResult; import org.libspark.flartoolkit.detector.FLARSingleMarkerDetector; import org.libspark.flartoolkit.support.pv3d.FLARBaseNode; import org.libspark.flartoolkit.support.pv3d.FLARCamera3D; import org.papervision3d.materials.shadematerials.FlatShadeMaterial; import org.papervision3d.materials.utils.MaterialsList; import org.papervision3d.cameras.*; import org.papervision3d.lights.PointLight3D; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.objects.primitives.Cube; import org.papervision3d.render.BasicRenderEngine; import org.papervision3d.scenes.Scene3D; import org.papervision3d.view.Viewport3D;//lots of imports [SWF(width="640", height="480", frameRate="30", backgroundColor="#FFFFFF")]//sets the movie run size, framerate and background colour public class FLARTree extends Sprite{ [Embed(source="pat1.pat", mimeType="application/octet-stream")] private var pattern:Class; [Embed(source = "camera_para.dat", mimeType = "application/octet-stream")] private var params:Class; private var myTree:Tree = new Tree(); private var fparams:FLARParam; private var mpattern:FLARCode; private var vid:Video; private var cam:Camera; private var bmd:BitmapData; private var raster:FLARRgbRaster_BitmapData; private var detector:FLARSingleMarkerDetector; private var scene:Scene3D; private var camera:FLARCamera3D; private var container:FLARBaseNode; private var vp:Viewport3D; private var bre:BasicRenderEngine; private var trans:FLARTransMatResult; private var group:DisplayObject3D = new DisplayObject3D; private var tree:Tree; //declare a tree private var cube:Cube; //declare a cube for the ground it grows on public function FLARTree(){ setupFLAR();//boiler plate code for the FLAR code setupCamera(); setupBitmap(); initStudio(); addEventListener(Event.ENTER_FRAME, loop); } private function setupFLAR():void{ fparams = new FLARParam(); fparams.loadARParam(new params() as ByteArray); mpattern = new FLARCode(16, 16); mpattern.loadARPatt(new pattern()); } private function setupCamera():void{ vid = new Video(640, 480); cam = Camera.getCamera(); cam.setMode(640, 480, 30); vid.attachCamera(cam); addChild(vid); } private function setupBitmap():void{ bmd = new BitmapData(640, 480); bmd.draw(vid); raster = new FLARRgbRaster_BitmapData(bmd); detector = new FLARSingleMarkerDetector(fparams, mpattern, 80); } private function initStudio():void{ scene = new Scene3D(); camera = new FLARCamera3D(fparams); container = new FLARBaseNode(); scene.addChild(container); var pl:PointLight3D = new PointLight3D(); var ml:MaterialsList = new MaterialsList({all: new FlatShadeMaterial(pl,0x558800)}); pl.x = 100; pl.y = 100; pl.z = -100; cube = new Cube(ml, 80, 5, 50); group.rotationY = 90; tree = new Tree(); tree.newLines3D.rotationX = 90; group.addChild(cube); group.addChild(tree.newLines3D); group.moveBackward(70); //Moves all the objects down on the page (it says moveBackwards, but really because it has been rotated it means moveDown container.addChild(group); bre = new BasicRenderEngine(); trans = new FLARTransMatResult(); vp = new Viewport3D(); addChild(vp); } private function loop(e:Event):void{ bmd.draw(vid); try{ if(detector.detectMarkerLite(raster, 80) && detector.getConfidence() > 0.5){ detector.getTransformMatrix(trans); container.setTransformMatrix(trans); bre.renderScene(scene, camera, vp); } } catch(e:Error){} } } }