�����б� �ظ� ����

[�̳�] FLARTookit�������

���������д�ij�����˵��������AS3������AR������������Ǵ�FLARManager��example��д�ġ���������Ч����http://cankeyyin.blog.163.com/album163/

һ��FLARToolKit����
����FLARToolKit��ARToolKit��AS3�汾��ARToolKit�Ǹ����Դ�����ǿ��ʵ��C����⣬Ȼ��������Adobe Flash/Flex/AIR��FLARToolKit��������ֻ�Ƕ�֮ǰC�汾����ֲ��FLARToolKit�Ǵ�Java�汾��ֲ�����ģ������ƽ��� NyARToolKit������nyatla�ļ��Ŭ��֮������NyARToolKit��ִ���ٶ�Ҫ��ԭʼ��C�汾�죩��

����ʹ��AS3�����ĺô�
1����ϵͳ��ƽ̨
2�������Ƕ����ҳ����

��������ǰҪ׼���ġ�����
1������ͷ
2����װAS3��IDE��Flash��Flex��Flashdevelop������һ������
    �������������Flex�����ģ������ѧ����Flex
3������&��װ������ARToolkit Marker Generator
      �����AIR������Ҫ��ĵ�����AIR��Runtime
4�����ظ�����FLARManager���������FLARToolkit��3D���棩

�ġ�����FLARManager������
     FLARManager��һ�����FLARToolkit��������⣬��Ҫ���ڹ������ʶ��ͼ�Ρ�
     ����ǰ���ȵ���һ���Ѿ�д�õij���
     ���������FLARManager_v5����ѹ���Flex��ѡ��File-Import-Flex Project����Project Folder����ѡ���ѹ���·�����Ϳ��Ե��������Ŀ��
     ��Ŀ��markerͼ����\FLARManager_v05\resources\flar\patterns���棬��ӡpattens01.pdf��װ������ͷ��ѡ��Run-Debug�Ϳ��Ե����������Ч���ˡ���������ӡ�����pattens01.pdf��������ͷ������Ҳ�С�
     ����������һ�³����ļ���������֯�ġ�
     FLARToolkit����src/org/libspark����
     3D������lib����
     ʾ������������src/FLARManagerExampleLauncher.as�����Ǵ����as�ļ��Ϳ��Կ����������кܶ����̸����ǵ��ԡ���Щ���̵����ļ���src/example���档��������src/example/support���档

�塢��������
      ���������Car.rar�����������̸�д�ij������������ģ������Flash 3D�о�����վ���صģ�http://www.flab3d.com/tutorials_05_pv3dloadDAE.php����������������������DAEģ�͡�
      �������������̸�д�����ٹ�����������Ҫ���������¼�����
      ��һ������һ��Marker������pat�ļ�
      ���ǿ�����ARToolkit Marker Generator��������Marker��Ӧ��pat�ļ������������������������ϸ������Կ������ַ��http://www.mikkoh.com/blog/?p=182��
      �ڶ�������дflarConfig.xml
      ����ļ��Ǽ�¼pat�ļ�·���ġ�
      �������õ�Marker��������\FLARManager_v05\resources\flar\patternsĿ¼�µ�pattens01.pdf������ǰ�����ҾͲ������ˡ�
      ����������д����
      ���ҵij���������Ҫ�������࣬һ���Ƕ�����Objects_3D����һ����FLARManager���ƶ�����ʾ����FLARManager_PV3D��
      Objects_3D�����Ҫ��������ʼ��PV3D�������������󡢶����������ķ���
1����ʼ��PV3D����
  1. //��ʼ��PV3D
  2. private function initPapervisionEnvironment (cameraParams:FLARParam, mirrorDisplay:Boolean, viewportWidth:Number, viewportHeight:Number) :void {
  3. this.scene3D = new Scene3D();
  4. this.camera3D = new FLARCamera3D(cameraParams);

  5. this.viewport3D = new Viewport3D(viewportWidth, viewportHeight);
  6. if (mirrorDisplay) {
  7. this.viewport3D.x = viewportWidth;
  8. this.viewport3D.scaleX = -1;
  9. }
  10. this.addChild(this.viewport3D);

  11. this.renderEngine = new LazyRenderEngine(this.scene3D, this.camera3D, this.viewport3D);

  12. this.pointLight3D = new PointLight3D();
  13. this.pointLight3D.x = 1000;
  14. this.pointLight3D.y = 1000;
  15. this.pointLight3D.z = -1000;

  16. this.addEventListener(Event.ENTER_FRAME, this.onEnterFrame);
  17. }
���ƴ���
���ǿ��Ը�����ʾ����Ҫ���޸ĵ��еĴ��롣
2����������
  1. private function creatModel():void{
  2. //������ģ��
  3. var materialsList:MaterialsList = new MaterialsList({all: new FlatShadeMaterial(this.pointLight3D, 0x19FFAA, 0x007348)});
  4. cube = new Cube(materialsList, CUBE_SIZE, CUBE_SIZE, CUBE_SIZE);
  5. cube.z = 0.5 * CUBE_SIZE;

  6. //��������ģ��
  7. car = new DAE(true, "car", true);
  8. car.load("../resources/assets/car.xml");
  9. car.rotationX = 90;
  10. car.rotationZ = 90;
  11. car.scale = 10;
  12. }
���ƴ���
3�������������ķ���
  1. public function addMarker (marker:FLARMarker) :void {
  2. //���Marker
  3. var markerList:Vector.<FLARMarker> = this.markersByPatternId[marker.patternId];
  4. markerList.push(marker);

  5. //����һ��3Dģ�͵�����
  6. var containerisplayObject3D = new DisplayObject3D();

  7. //���ݲ�ͬ��Marker��ʾ��ͬ�Ķ���
  8. //�Ҵ�ӡ������ֽ������12��Marker��3*4���У�patternIdΪ4��7�ľ����м�������
  9. if(marker.patternId==4)
  10. container.addChild(car);
  11. else if(marker.patternId==7)
  12. container.addChild(cube);
  13. this.scene3D.addChild(container);

  14. this.containersByMarker[marker] = container;
  15. }

  16. public function removeMarker (marker:FLARMarker) :void {
  17. var markerList:Vector.<FLARMarker> = this.markersByPatternId[marker.patternId];
  18. var markerIndex:uint = markerList.indexOf(marker);
  19. if (markerIndex != -1) {
  20. markerList.splice(markerIndex, 1);
  21. }

  22. var containerisplayObject3D = this.containersByMarker[marker];
  23. if (container) {
  24. this.scene3D.removeChild(container);
  25. }
  26. delete this.containersByMarker[marker]
  27. }

  28. private function onEnterFrame (evt:Event) :void {
  29. this.updateObjects();
  30. this.renderEngine.render();
  31. }

  32. private function updateObjects () :void {
  33. var i:int = this.markersByPatternId.length;
  34. var markerList:Vector.<FLARMarker>;
  35. var marker:FLARMarker;
  36. var containerisplayObject3D;
  37. var j:int;
  38. while (i--) {
  39. markerList = this.markersByPatternId;
  40. j = markerList.length;
  41. while (j--) {
  42. marker = markerList[j];
  43. container = this.containersByMarker[marker];
  44. container.transform = FLARPVGeomUtils.convertFLARMatrixToPVMatrix(marker.transformMatrix);
  45. }
  46. }
  47. }
���ƴ���
FLARManager_PV3D�����Ҫ��������ʼ��FLARManager������Marker�¼�
      �����Ĵ�������ϲ���Ҫ��ʲô�Ķ���д�����ʱ���ƹ�ȥ�Ϳ����ˡ�
1����ʼ��FLARManager
  1. private function init () :void {
  2. this.flarManager = new FLARManager("../resources/flar/flarConfig.xml");

  3. this.flarManager.addEventListener(ErrorEvent.ERROR, this.onFlarManagerError);

  4. this.addChild(Sprite(this.flarManager.flarSource));

  5. this.flarManager.addEventListener(FLARMarkerEvent.MARKER_ADDED, this.onMarkerAdded);
  6. this.flarManager.addEventListener(FLARMarkerEvent.MARKER_UPDATED, this.onMarkerUpdated);
  7. this.flarManager.addEventListener(FLARMarkerEvent.MARKER_REMOVED, this.onMarkerRemoved);

  8. var framerateDisplay:FramerateDisplay = new FramerateDisplay();
  9. this.addChild(framerateDisplay);

  10. this.flarManager.addEventListener(Event.INIT, this.onFlarManagerInited);
  11. }

  12. private function onFlarManagerError (evt:ErrorEvent) :void {
  13. this.flarManager.removeEventListener(ErrorEvent.ERROR, this.onFlarManagerError);
  14. this.flarManager.removeEventListener(Event.INIT, this.onFlarManagerInited);

  15. trace(evt.text);
  16. }

  17. private function onFlarManagerInited (evt:Event) :void {
  18. this.flarManager.removeEventListener(ErrorEvent.ERROR, this.onFlarManagerError);
  19. this.flarManager.removeEventListener(Event.INIT, this.onFlarManagerInited);
  20. this.myObjects = new Objects_3D(this.flarManager.numLoadedPatterns, this.flarManager.cameraParams,
  21. this.flarManager.mirrorDisplay, this.stage.stageWidth, this.stage.stageHeight);
  22. this.addChild(this.myObjects);

  23. this.myObjects.mouseChildren = false;
  24. }
���ƴ���
2������Marker�¼�
  1. //�����¼���Ȼ��������Ӧ����
  2. private function onMarkerAdded (evt:FLARMarkerEvent) :void {
  3. this.myObjects.addMarker(evt.marker);
  4. }

  5. private function onMarkerUpdated (evt:FLARMarkerEvent) :void {
  6. }

  7. private function onMarkerRemoved (evt:FLARMarkerEvent) :void {
  8. this.myObjects.removeMarker(evt.marker);
  9. }
���ƴ���
���꣩

����:

�������ص�������Ҫ�ظ��ſ������
����: �����ڵ��û����޷����ػ�鿴����
1

���ִ���

  • reflux

53# jayen

���԰�
�����б�