root/as3/FLARToolKit/trunk/src/examples/FLARIDMarkerSample.as

リビジョン 3980, 4.6 kB (コミッタ: tarotarorg, コミット時期: 2 年 前)

--

Line 
1 package examples
2 {
3         import flash.display.Bitmap;
4         import flash.display.BitmapData;
5         import flash.display.PixelSnapping;
6         import flash.display.Sprite;
7         import flash.events.Event;
8         import flash.media.Camera;
9         import flash.media.Video;
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.idmarker.data.FLARIdMarkerData;
14         import org.libspark.flartoolkit.detector.idmarker.FLARSingleIdMarkerDetector;
15         import org.libspark.flartoolkit.support.pv3d.FLARBaseNode;
16         import org.libspark.flartoolkit.support.pv3d.FLARCamera3D;
17         import org.papervision3d.materials.special.Letter3DMaterial;
18         import org.papervision3d.render.LazyRenderEngine;
19         import org.papervision3d.scenes.Scene3D;
20         import org.papervision3d.typography.fonts.HelveticaBold;
21         import org.papervision3d.typography.Text3D;
22         import org.papervision3d.view.Viewport3D;
23        
24         /**
25          * ...
26          * @author tarotarorg
27          */
28         public class FLARIDMarkerSample extends Sprite
29         {
30                 private static const CAMERA_WIDTH:uint = 320;
31                 private static const CAMERA_HEIGHT:uint = 240;
32                 private var _raster:FLARRgbRaster_BitmapData;
33                 private var _detector:FLARSingleIdMarkerDetector;
34                 private var _video:Video;
35                 private var _capture:Bitmap;
36                 private var _renderer:LazyRenderEngine;
37                 private var _textdata:Text3D;
38                 private var _textFormat:Letter3DMaterial;
39                 private var _markerNode:FLARBaseNode;
40                
41                 private var _resultMat:FLARTransMatResult;
42                
43                 public function FLARIDMarkerSample():void
44                 {
45                         if (stage) init();
46                         else addEventListener(Event.ADDED_TO_STAGE, init);
47                 }
48                
49                 private function init(e:Event = null):void
50                 {
51                         removeEventListener(Event.ADDED_TO_STAGE, init);
52                         // entry point
53                        
54                         var webcam:Camera = Camera.getCamera();
55                         if (!webcam) throw new Error('No webcam!!!!');
56                         webcam.setMode(CAMERA_WIDTH, CAMERA_HEIGHT, 30);
57                         this._video = new Video(CAMERA_WIDTH, CAMERA_HEIGHT);
58                         this._video.attachCamera(webcam);
59                        
60                         _capture = new Bitmap(new BitmapData(320, 240, false, 0),
61                                                                   PixelSnapping.AUTO, true);
62                         _capture.width = 640;_capture.height = 480;
63                         _raster = new FLARRgbRaster_BitmapData(_capture.bitmapData);
64                         var base:Sprite = addChild(new Sprite()) as Sprite;
65                         base.addChild(_capture);
66
67                         var param:FLARParam = new FLARParam();
68                         param.changeScreenSize(CAMERA_WIDTH, CAMERA_HEIGHT);
69                        
70                         this._resultMat = new FLARTransMatResult();
71                        
72                         this._detector = new FLARSingleIdMarkerDetector(param, 80);
73                         this._detector.setContinueMode(true);
74                        
75                         var scene:Scene3D = new Scene3D();
76                         _markerNode = scene.addChild(new FLARBaseNode()) as FLARBaseNode;
77                         var viewport:Viewport3D =
78                                 base.addChild(new Viewport3D(320, 240)) as Viewport3D;
79                         viewport.scaleX = 640 / 320;viewport.scaleY = 480 / 240;
80                         viewport.x = -4;
81                        
82                         var camera3d:FLARCamera3D = new FLARCamera3D(param);
83                         // ID表示用のデータを作成する。
84                         _textFormat = new Letter3DMaterial(0xcc0000, 0.9);
85                         _textdata = new Text3D("aaa", new HelveticaBold(), _textFormat, "textdata")
86                         _textdata.rotationX = 180;
87                         _textdata.rotationZ = 90;
88                         _textdata.scale = 0.5;
89                         _markerNode.addChild(_textdata);
90                         _renderer = new LazyRenderEngine(scene, camera3d, viewport);
91
92                         addEventListener(Event.ENTER_FRAME, _onEnterFrame);
93                 }
94                
95                 private function _onEnterFrame(e:Event = null):void
96                 {
97                         _capture.bitmapData.draw(_video);
98
99                         var detected:Boolean = false;
100                         try {
101                                 detected = _detector.detectMarkerLite(_raster, 80);
102                         } catch (e:Error) { trace(e); }
103                        
104                         if (detected) {
105                                 var id:FLARIdMarkerData = _detector.getIdMarkerData();
106                                 //read data from i_code via Marsial--Marshal経由で読み出す
107                                 var currId:int;
108                                 if (id.packetLength > 4) {
109                                         currId = -1;
110                                 }else{
111                                         currId=0;
112                                         //最大4バイト繋げて1個のint値に変換
113                                         for (var i:int = 0; i < id.packetLength; i++ ) {
114                                                 currId = (currId << 8) | id.getPacketData(i); trace("id[", i, "]=", id.getPacketData(i));
115                                         }
116                                 }
117                                 trace("[add] : ID = " + currId);
118                                 _textdata.text = "" + currId;
119                                 if (id.model == 3) {
120                                         _textFormat.fillColor = (id.getPacketData(1) << 26) | (id.getPacketData(2) << 8) | (id.getPacketData(3));
121                                 } else {
122                                         _textFormat.fillColor = 0xCC0000;
123                                 }
124                                 _textFormat.updateBitmap();
125                                 _detector.getTransformMatrix(_resultMat);
126                                 _markerNode.setTransformMatrix(_resultMat);
127                                
128                                 _markerNode.visible = true;
129                         } else {
130                                 _markerNode.visible = false;
131                         }
132                         _renderer.render();
133                 }
134                
135         }
136        
137 }
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。