ARDetector将会扫描BitmapData来决定现在是否是有效的标记。我们在onActivate方法后添加下面的方法:- /**
- * Creates a Bitmap for us to scan for valid markers.
- *
- */
- protected function createCaptureSource():void
- {
- capturedSrc = new Bitmap(new BitmapData(arDetector.width, arDetector.height, false, 0), PixelSnapping.AUTO, true);
- arDetector.src = capturedSrc.bitmapData;
- addChild(capturedSrc);
- }
复制代码 声明的变量和导入的类包:- protected var capturedSrc:Bitmap;
- import flash.display.Bitmap;
- import flash.display.BitmapData;
- import flash.display.PixelSnapping;
复制代码下一步我们将会在我们调用init之前调用这个方法。改变onActivate方法:
protected function onActivate(event:Event):void{ createCaptureSource(); init();}
下一个方法将会对我们的cardEmulator处理更新captureSrc的bitmapData。在renderViewport方法后添加如下代码:- /**
- * Updates the capturedSrc with new bitmap data.
- *
- */
- protected function updateCaptureBitmap():void
- {
- capturedSrc.bitmapData.draw(cardEmulator.viewport);
- }
复制代码 注意到我们是如何由cardEmulator的viewport到capturedSrc画BitmapData了么?这种构建将会允许我们用用户的摄像头置换出cardEmulator。目前我们还有一些东西要添加来使得它工作起来。让我们继续在我们的渲染循环中调用updateCaptureBitmap。改变renderViewport方法:- public function renderViewport(event:Event = null):void
- {
- cardEmulator.render();
- updateCaptureBitmap();
- renderer.renderScene(scene, camera, viewport);
- }
复制代码 我们需要做的最后一件事情就是告诉仿真器它不用向它的显示列表添加viewport了,在构造函数中的第四个参数默认为false,所以让我们来改变createEmulatorCard方法中的一条line:- cardEmulator = new CardEmulator("images/flarlogo.gif", 320, 240, true);
- 变为:
- cardEmulator = new CardEmulator("images/flarlogo.gif");
复制代码记住captureSrc现在直接从仿真器的viewport中取样BitmapData,所以不需要在CardEmulator中显示viewport,如果你现在正在运行,所有的都应该看上去一样除了仿真器正在绘制我们的captureSrc的bitmap。为了确保我们仅有一个显示对象被渲染你可以试着将captureSrc的x属性平移360px。如果你既看到了CardEmulator又看到了captureSrc,那么这个是错误的。
非常好,我们现在已经捕捉到了源,我们的仿真器正在运行所以让我们将它连接到ARDetector.
转载http://miyaonanhai.blogbus.com/logs/70837043.html
|