- Augmented Reality 101
- Augmented Reality : The Code
In my last post on Augmented Reality 101, i had shown a sample of how the FLARToolkit outputs using Flash. Here i would like to share the code i had written for that sample so that u know what are all the modules that u need to import from the various packages, (from FLAR and Papervision) and what are all the classes that need to be defined to get this to work. You will obviously need to replace the model file and the marker file to a custom one, rest of it is a good skeleton code to build something for AR.
The below code may require you to have the FLEX SDK 3.0 Library – Download from HERE.
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 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.PixelSnapping; import flash.display.Sprite; import flash.media.Camera; import flash.media.Video; import flash.events.Event; import flash.utils.ByteArray; //FLAR IMPORT 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.detector.FLARSingleMarkerDetector; //PAPERVISION IMPORT SCENE GLOBALS import org.libspark.flartoolkit.core.transmat.FLARTransMatResult; import org.libspark.flartoolkit.support.pv3d.FLARBaseNode; import org.libspark.flartoolkit.support.pv3d.FLARCamera3D; import org.papervision3d.render.LazyRenderEngine; import org.papervision3d.scenes.Scene3D; import org.papervision3d.view.Viewport3D; //PAPERVISION IMPORT OBJECTS GLOBALS import org.papervision3d.objects.parsers.DAE; import org.papervision3d.lights.PointLight3D; import org.papervision3d.materials.WireframeMaterial; import org.papervision3d.materials.utils.MaterialsList; import org.papervision3d.materials.ColorMaterial; import org.papervision3d.materials.shadematerials.FlatShadeMaterial; import org.papervision3d.materials.shadematerials.PhongMaterial; import org.papervision3d.events.FileLoadEvent; //INITIALIZE SWF PARAMS [SWF(width="640", height="480", frameRate="30", backgroundColor="#FFFFFF")] public class ArApp extends Sprite { //EMBED MARKER FILE (NEEDS FLEX SDK 3) [Embed(source="Data/crunkMarker16.pat", mimeType="application/octet-stream")] private var pattern:Class; //EMBED CAMERA PARAMS FILE (NEEDS FLEX SDK 3) [Embed(source="Data/camera_para.dat", mimeType="application/octet-stream")] private var params:Class; //FLAR VARS protected var Param:FLARParam; protected var Code:FLARCode; protected var raster:FLARRgbRaster_BitmapData; protected var detector:FLARSingleMarkerDetector; protected var resultMat:FLARTransMatResult = new FLARTransMatResult(); //WEBCAM DATA VARS protected var webcamBox:Camera; protected var video:Video; protected var capture:BitmapData; //PAPERVISION VARS protected var viewport:Viewport3D; protected var camera3d:FLARCamera3D; protected var scene:Scene3D; protected var renderer:LazyRenderEngine; protected var markerNode:FLARBaseNode; //EXTERNAL MODEL VARS private var ext_model:DAE; public function ArApp() { doArApp(); addEventListener(Event.ENTER_FRAME, loop); } private function doArApp():void { // FLAR CONSTRUCTOR Param = new FLARParam(); Param.loadARParam(new params() as ByteArray); Code = new FLARCode(16, 16); Code.loadARPatt(new pattern()); //WEBCAM DATA webcamBox = Camera.getCamera(); if (!webcamBox) { trace ('No webcam!!!!'); throw new Error('No webcam!!!!'); } webcamBox.setMode(640, 480, 30); video = new Video(640, 480); video.attachCamera(webcamBox); addChild(video); //BITMAP DATA capture = new BitmapData(640, 480); capture.draw(video); raster = new FLARRgbRaster_BitmapData(capture); detector = new FLARSingleMarkerDetector(Param, Code, 80); //PV3D DATA camera3d = new FLARCamera3D(Param); scene = new Scene3D(); markerNode = scene.addChild(new FLARBaseNode()) as FLARBaseNode; viewport = new Viewport3D(); renderer = new LazyRenderEngine(scene, camera3d, viewport); //OBJECT BASED VARS - LIGHTS, MATERIALS, MODEL. var light:PointLight3D = new PointLight3D(); light.x = 0; light.y = 1000; light.z = -1000; var ar_materials:MaterialsList = new MaterialsList({all: new PhongMaterial(light,0xffffff,0x000000,0.3)}); ext_model = new DAE(); ext_model.load('model/dastardly2.dae',ar_materials); //CUSTOM OBJECT TRANSFORM ext_model.scale = 10; ext_model.rotationX = 90; markerNode.addChild(ext_model); addChild(viewport); } private function loop(e:Event):void { capture.draw(video); var detected:Boolean = false; try { detected = detector.detectMarkerLite(raster, 80) && detector.getConfidence() > 0.5; } catch (e:Error) {} if (detected) { detector.getTransformMatrix(resultMat); //GET markerNode.setTransformMatrix(resultMat); //SET markerNode.visible = true; //GO } else { markerNode.visible = false; //REMOVE IF MARKER NO IN FRAME } renderer.render(); //RENDER THE SCENE } } } |

































