Feb 24, 2009
Desktop (literal) driving demo

It’s no secret that we’re obsessed with augmented reality. Using this fantastic car demo whipped up by John Lindquist over at pv3d.org, we added in some FLARToolkit love to create a cool experience of driving the car around on a table.
But we didn’t stop there. Using the mind blowing-ly good ControllerMate and some simple keyboard mapping classes, we hooked the car up to a wired xbox 360 controller for maximum nerd. Next step, get some shaders going on that sweet Ford Focus. Ah, we couldn’t resist, so we added a shader.
UPDATE: YouTube was being unhappy with our videos for some reason (we suspect it doesn’t get along with Snapz, but who knows), so we’re moving over to Vimeo. We’ve also updated our demo video here, too, to include a slight shadow under the car, as well as part where the car does it’s business without the flar symbol present. Enjoy!

Very cool. I can’t wait to see you it apply to a brand. Keep us posted.
zack
Excellent very nice work….Ive Just tried to do that but dont work
please can you give us the source for flartoollkit? thank you very much
Hi Javier – I recommend starting here for getting and using FLARToolKit: http://saqoosha.net/en/flartoolkit/start-up-guide/
yes I read that but the code line
public class RASuite extends PV3DARApp —– the “PV3DARApp” doesnt work whit the example car
because that use public class CarDrive extends Sprite.
then show an error..
thanks anyway
I need to put video files on a plane en flartoolkit but I use this code but doesnt work
package {
import flash.events.Event;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.events.MouseEvent;
import org.papervision3d.lights.PointLight3D;
import org.papervision3d.materials.WireframeMaterial;
import org.papervision3d.objects.parsers.Collada;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.view.BasicView;
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.materials.VideoStreamMaterial;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.objects.primitives.Sphere;
import org.papervision3d.render.LazyRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
[SWF(width=640,height=480,frameRate=30,backgroundColor=0x0)]
public class RASuite extends PV3DARApp
{
//private var mCollada:Collada;
private var universe:DisplayObject3D;
private var plane:Plane;
private var _plane:Plane;
private var videoCristina:VideoStreamMaterial;
private var quality:uint = 8;
private var nc:NetConnection;
private var video:Video;
private var ns:NetStream;
//private var viewport:Viewport3D;
private var scene:Scene3D;
//private var camera:Camera3D;
//private var renderer:BasicRenderEngine;
private var renderer:LazyRenderEngine;
public function RASuite()
{
this.addEventListener(Event.INIT, this.onInit);
this.init(’Data/camera_para.dat’, ‘Data/patt.hiro’);
//plane = new Plane(videoStreamMaterial, 1600, 1200, quality, quality);
//plane = new Plane(videoStreamMaterial, 320, 240, quality, quality);
//scene.addChild(plane);
//camera.target = plane;
}
protected override function onInit():void
{
super.onInit();
this.removeEventListener(Event.INIT, this.onInit);
var customClient:Object = new Object();
customClient.onMetaData = metaDataHandler;
nc = new NetConnection();
nc.connect(null);
var wmat:WireframeMaterial = new WireframeMaterial(0xff0000, 1, 2);
wmat.doubleSided = true;
this._plane = new Plane(wmat, 80, 80);
this._baseNode.addChild(this._plane);
ns = new NetStream(nc);
ns.client = customClient;
ns.play(”cristina.flv”);
video = new Video();
video.width = 320;
video.height = 240;
//video.smoothing = true;
video.attachNetStream(ns);
videoCristina = new VideoStreamMaterial(video, ns, true);
this.plane = new Plane(videoCristina, 80, 80);
//this.mCollada = new Collada(”tank.dae”);
this.universe = new DisplayObject3D();
this._baseNode.addChild(this.plane);
this._baseNode.addChild(this.universe);
this.renderer = new LazyRenderEngine(this._scene, this._camera3d, this._viewport);
this.stage.addEventListener(MouseEvent.CLICK, this._onClick);
this.renderer.render();
}
private function metaDataHandler(infoObject:Object):void
{
trace(’metaDataHandler’,infoObject);
}
private function _onClick(e:MouseEvent):void {
//this.mirror = !this.mirror;
this.ns.play(”cristina.flv”);
//this._baseNode.addChild(this.universe);
}
}
}
the video apperar and disappear.. if you help me I could pay you for this help..
thanks
[WORDPRESS HASHCASH] The poster sent us ‘0 which is not a hashcash value.
Can you share you source?… thank you
[...] At Squidder, they apparently love augmented reality and besides an nice experiment with a car, they made an augmented reality Twitter feed [...]
why they want share the info..? thats bad thing….I just want help
Ok no more… http://www.atntelevision.tv/focusracer/ there my version of driving demo… thanks for no help me…bye
[...] XBOX HACK: AR Driving Demo (Flash + FLARtoolkit + xbox controller). from Squidder figured out how to drive a mini-car on your desktop using an xbox controller, see how. [...]
Hello. Very cool your AR.
I would like to know how to do to enable the XBOX controller in Flash?
Hugs