Si!! está vez es un ejemplo más del mundo 3d pero ahora en Realidad Aumentada en Flash con papervision3d. Para este ejemplo igual se necesita de otras librerias que nos ayuden a generar este entorno junto con las clases ya comunes de papervision3d. Por lo que necesitaremos bajarlas desde este link:

http://www.libspark.org/svn/as3/FLARToolKit/trunk
Pero en este caso no hay un zip o algo para poder descaragar nuestro paquetito de clases, por lo que se neceisita de un programa SVN, podrán ayudar estos que se encuentran aquí, hay uno muy bueno para mac que se llama Versions, que alguien pase un serial, que diga me ayude a comprar una licencial!!!
Nuestra creación será lo siguiente:

Ejemplos para hacer algo así hay muy pocos y aún falta por entender el uso de las clases jaja lo malo que la mayoría de la documentación y ejemplos está en japonés, diablos, algún día aprenderé.

El proyecto en esté caso lo hice en el FlexBuilder como "ActionScript Project", solo es cuestión de copiar y pegar. Necesitaras estos dos archivos:

camera_para.dat y marker16.pat

Después para probar nuestro ejemplo, tenemos que imprimir el patrón imagen, en este ejemplo usaremos el ya conocido patrón que se hace uso en GE.

http://ge.ecomagination.com/smartgrid/ar/printme.pdf

Y pues es todo, aqui esta el demo en línea para que lo prueben, no olviden imprimir el patrón imagen del archivo pdf.

  1. package {
  2.     import flash.display.BitmapData;
  3.     import flash.display.Sprite;
  4.     import flash.events.Event;
  5.     import flash.media.Camera;
  6.     import flash.media.Video;
  7.     import flash.utils.ByteArray;
  8.    
  9.     import org.libspark.flartoolkit.core.FLARCode;
  10.     import org.libspark.flartoolkit.core.param.FLARParam;
  11.     import org.libspark.flartoolkit.core.raster.rgb.FLARRgbRaster_BitmapData;
  12.     import org.libspark.flartoolkit.core.transmat.FLARTransMatResult;
  13.     import org.libspark.flartoolkit.detector.FLARSingleMarkerDetector;
  14.     import org.libspark.flartoolkit.pv3d.FLARBaseNode;
  15.     import org.libspark.flartoolkit.pv3d.FLARCamera3D;
  16.  
  17.     import org.papervision3d.lights.PointLight3D;
  18.     import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
  19.     import org.papervision3d.materials.utils.MaterialsList;
  20.     import org.papervision3d.materials.ColorMaterial;
  21.     import org.papervision3d.objects.primitives.Cube;
  22.     import org.papervision3d.render.BasicRenderEngine;
  23.     import org.papervision3d.scenes.Scene3D;
  24.     import org.papervision3d.view.Viewport3D;
  25.    
  26.     [SWF(width="600", height="450", frameRate="30", backgroundColor="#000000")]
  27.  
  28.     public class FirstAR extends Sprite{
  29.         [Embed(source="marker16.pat", mimeType="application/octet-stream")]
  30.         private var pattern:Class;
  31.        
  32.         [Embed(source="camera_para.dat", mimeType="application/octet-stream")]
  33.         private var params:Class;
  34.        
  35.         private var flarParam:FLARParam;
  36.         private var flarCode:FLARCode;
  37.        
  38.         private var camera:Camera;
  39.         private var video:Video;
  40.         private var bitmapData:BitmapData;
  41.         private var raster:FLARRgbRaster_BitmapData;
  42.         private var detector:FLARSingleMarkerDetector;
  43.  
  44.        
  45.         private var scene:Scene3D;
  46.         private var viewport:Viewport3D;
  47.         private var render:BasicRenderEngine;
  48.                        
  49.         private var cube:Cube;
  50.        
  51.         private var cam3D:FLARCamera3D;
  52.         private var container:FLARBaseNode;
  53.         private var trans:FLARTransMatResult;
  54.        
  55.         public function FirstAR(){
  56.             setFLAR(); // Carga de nuestro patrón y parametros de camara
  57.             setCamera(); // Agregamos nuestra camara al stage
  58.             setBitmap(); // Establecemos nuestro objeto bitmapData para generar AR
  59.             setPV3D(); // Nuestro entorno básico de papervision3d mas FlarToolkit
  60.             addEventListener(Event.ENTER_FRAME, onEnter); // Generando la salida cada frame de la pelicula
  61.         }
  62.        
  63.         private function setFLAR():void{
  64.             flarParam = new FLARParam();
  65.             flarParam.loadARParam(new params() as ByteArray);
  66.             flarCode = new FLARCode(16, 16);
  67.             flarCode.loadARPatt(new pattern());
  68.         }   
  69.        
  70.         private function setCamera():void{
  71.             video = new Video(600, 450);
  72.             camera = Camera.getCamera();
  73.             camera.setMode(600, 450, 30);
  74.             video.attachCamera(camera);
  75.             addChild(video);
  76.         }   
  77.        
  78.         private function setBitmap():void{
  79.             bitmapData = new BitmapData(640, 480);
  80.             bitmapData.draw(video);
  81.             raster = new FLARRgbRaster_BitmapData(bitmapData);
  82.             detector = new FLARSingleMarkerDetector(flarParam, flarCode, 80);
  83.         }   
  84.        
  85.         private function setPV3D():void{
  86.             // Al generar el entorno 3d, cambiamos la clase Camera3d por FLARCamera3D, además de
  87.             // agregar a la escena un contenedor de la clase FLARBaseNode al cual agregaremos
  88.             // nuestros objetos, lo demás es igual, salvo los usos de clases de Flar
  89.             scene = new Scene3D();
  90.             cam3D = new FLARCamera3D(flarParam);
  91.             container = new FLARBaseNode();
  92.             scene.addChild(container);
  93.            
  94.             var cube:Cube = new Cube(new MaterialsList({ front: new ColorMaterial(0x00ccff),
  95.                                                 left: new ColorMaterial(0xccff00),
  96.                                                 right: new ColorMaterial(0xffcc00),
  97.                                                 top: new ColorMaterial(0xff6666),
  98.                                                 bottom: new ColorMaterial(0x00cc33),
  99.                                                 back: new ColorMaterial(0xffffcc) }), 30, 30, 30);
  100.                                                            
  101.             cube.z = 50;
  102.             container.addChild(cube);
  103.            
  104.             render = new BasicRenderEngine();
  105.             trans = new FLARTransMatResult();
  106.            
  107.             viewport = new Viewport3D(600, 450, true);
  108.             addChild(viewport);
  109.         }   
  110.        
  111.         private function onEnter(e:Event):void{
  112.             // Cada refresco de frame generaremos la imagen del video de salida para que sea procesado
  113.             // y si se detecta el patrón en la imagen, el entorno 3d hace su aparicion
  114.             // siguiendo los movimientos del patrón imagen
  115.             bitmapData.draw(video);
  116.             try{
  117.                 if(detector.detectMarkerLite(raster, 80) && detector.getConfidence()> 0.5){
  118.                     detector.getTransformMatrix(trans);
  119.                     container.setTransformMatrix(trans);
  120.                     render.renderScene(scene, cam3D, viewport);
  121.                 }
  122.             }
  123.             catch(e:Error){
  124.             }
  125.         }
  126.     }
  127. }