Thanks for the offer Ian. But if its not the Flash IDE I would just
give up. I'm really used to working with Away3D in the Flash. I'm
still tinkering away with the code, still no luck. Everything is
running. There is something I must be missing. I can run it in Flex,
but I want to add Flash components to it.
Latest Code:
package
{
import away3d.animators.data.*;
import away3d.cameras.*;
import away3d.containers.*;
import away3d.core.base.*;
import away3d.core.clip.*;
import away3d.core.render.*;
import away3d.core.utils.*;
import away3d.events.*;
import away3d.lights.*;
import away3d.loaders.*;
import away3d.materials.*;
import flash.display.*;
import flash.events.*;
import flash.filters.*;
import flash.media.*;
import org.libspark.flartoolkit.away3d.*;
import org.libspark.flartoolkit.core.*;
import org.libspark.flartoolkit.core.param.*;
import org.libspark.flartoolkit.core.raster.rgb.*;
import org.libspark.flartoolkit.core.transmat.*;
import org.libspark.flartoolkit.detector.*;
public class FLARdemo2 extends Sprite
{
//camera configuration
[Embed(source="../assets/camera_para.dat",
mimeType='application/octet-stream')]
private var CameraDataClass:Class;
//marker configuration
[Embed(source="../assets/FLAR-marker.pat",
mimeType='application/octet-stream')]
private var PatternDataClass:Class;
//ogre MD2 animation
[Embed(source="../assets/ogre.md2", mimeType='application/
octet-stream')]
private var Model:Class;
//ogre texture
[Embed(source="../assets/ogre.jpg")]
private var Texture:Class;
//scene objects
private var scene:Scene3D;
private var camera:FLARCamera3D;
private var view:View3D;
//config properties
private var screenWidth:Number = 400;
private var screenHeight:Number = 300;
private var threshold:Number = 80;
private var markerWidth:Number = 80;
//FLARToolkit object
private var fBaseNode:FLARBaseNode;
private var fParam:FLARParam;
private var fCode:FLARCode;
private var fWebcam:Camera;
private var fVideo:Video;
private var fCapture:Bitmap;
private var fDetector:FLARSingleMarkerDetector;
private var fResult:FLARTransMatResult;
private var fRaster:FLARRgbRaster_BitmapData;
//marterial objects
private var material:BitmapMaterial;
//scene objects
private var model:Mesh;
//enterframe variables
private var blurFilter:BlurFilter = new BlurFilter(0, 0,
BitmapFilterQuality.LOW);
public var update:Boolean = false;
/**
* Constructor
*/
public function FLARdemo2()
{
init();
}
/**
* Global initialise function
*/
private function init():void
{
initFLARToolkit();
setupCamera();
initEngine();
initMaterials();
initObjects();
initListeners();
}
//Initialize the Camera
private function setupCamera():void
{
fWebcam = Camera.getCamera();
fWebcam.setMode(screenWidth, screenHeight, 30);
fVideo.attachCamera(fWebcam);
}
private function initEngine():void
{
scene = new Scene3D();
view = new View3D({scene:scene, camera:camera});
view.x = screenWidth - 5;
view.y = screenHeight;
//view.addSourceURL("srcview/index.html");
addChild(view);
}
/**
* Initialise the FLARToolkit
*/
private function initFLARToolkit():void
{
//setup camera parameters
fParam = new FLARParam();
fParam.loadARParam(new CameraDataClass());
fParam.changeScreenSize(screenWidth, screenHeight);
camera = new FLARCamera3D();
camera.setParam(fParam);
//setup marker code
fCode = new FLARCode(16, 16);
fCode.loadARPatt(new PatternDataClass());
//setup marker detector
fDetector = new FLARSingleMarkerDetector(fParam, fCode,
markerWidth);
fDetector.setContinueMode(false);
fResult = new FLARTransMatResult();
//setup webcam
fVideo = new Video(screenWidth, screenHeight);
//setup output capture
fCapture = new Bitmap(new BitmapData(screenWidth,
screenHeight, false, 0), PixelSnapping.AUTO, true);
fCapture.x = 0;
fCapture.y = 0;
fCapture.scaleX = 2.0;
fCapture.scaleY = 2.0;
addChild(fCapture);
//setup output bitmapData
fRaster = new FLARRgbRaster_BitmapData
(fCapture.bitmapData);
}
/**
* Initialise the materials
*/
private function initMaterials():void
{
material = new BitmapMaterial(Cast.bitmap(Texture));
}
/**
* Initialise the scene objects
*/
private function initObjects():void
{
//setup baseNode
fBaseNode = new FLARBaseNode();
scene.addChild(fBaseNode);
//setup model
model = Md2.parse(Model, {material:material}) as Mesh;
model.scale(0.02);
model.y += 45;
model.play(new AnimationSequence("stand", true, true,
10));
fBaseNode.addChild(model);
}
/**
* Initialise the listeners
*/
public function initListeners():void
{
addEventListener( Event.ENTER_FRAME, onEnterFrame );
}
/**
* Navigation and render loop
*/
private function onEnterFrame(event:Event):void
{
fCapture.bitmapData.draw(fVideo);
if (update) {
try {
//check for marker
if (fDetector.detectMarkerLite(fRaster, threshold)
&& fDetector.getConfidence() > 0.5) {
view.visible = true;
fDetector.getTransformMatrix(fResult);
fBaseNode.setTransformMatrix(fResult);
} else {
view.visible = false;
}
} catch (e:Error) {
trace("Error: " + e.message);
}
view.render();
} else {
fCapture.bitmapData.applyFilter(fCapture.bitmapData,
fCapture.bitmapData.rect, fCapture.bitmapData.rect.topLeft,
blurFilter);
}
}
}
}