加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

用PV3D在Flex中实现全景360

发布时间:2020-12-15 04:00:25 所属栏目:百科 来源:网络整理
导读:http://blog.csdn.net/sunqunsunqun/article/details/7168648#comments PV3D采用的是左手坐标系,默认的X正向指向屏幕右侧,Y正向指向屏幕上方,Z正向垂直屏幕向内,下图左侧为左手坐标系,用户默认的观察视角是沿着Z轴的负半轴方向。 将实景360场景封装为一

http://blog.csdn.net/sunqunsunqun/article/details/7168648#comments

PV3D采用的是左手坐标系,默认的X正向指向屏幕右侧,Y正向指向屏幕上方,Z正向垂直屏幕向内,下图左侧为左手坐标系,用户默认的观察视角是沿着Z轴的负半轴方向。


将实景360场景封装为一个类,代码如下:

[java]? view plain copy
  1. package??
  2. {??
  3. ????import?flash.display.Sprite;??
  4. ????import?flash.events.Event;??
  5. import?flash.events.MouseEvent;??
  6. ??????
  7. import?mx.controls.Alert;??
  8. import?org.papervision3d.cameras.Camera3D;??
  9. import?org.papervision3d.materials.BitmapFileMaterial;??
  10. import?org.papervision3d.materials.utils.BitmapMaterialTools;??
  11. import?org.papervision3d.objects.primitives.Cylinder;??
  12. import?org.papervision3d.objects.primitives.Sphere;??
  13. import?org.papervision3d.render.BasicRenderEngine;??
  14. import?org.papervision3d.scenes.Scene3D;??
  15. import?org.papervision3d.view.Viewport3D;??
  16. ??????
  17. public?class?MyPV3D?extends?Sprite??
  18. ????{??
  19. ????????private?var?sphere:Sphere;??
  20. ????????private?var?myMouseDown:Boolean?=?false;??
  21. private?var?viewport:Viewport3D;??
  22. private?var?scene:Scene3D;??
  23. private?var?camera:Camera3D;??
  24. private?var?render:BasicRenderEngine;??
  25. ??????????
  26. private?var?bMouseMove:Boolean?=?private?var?OldMouseX:Number?=?-1;??
  27. private?var?OldMouseY:Number?=?-1;??
  28. public?function?MyPV3D(str:String)??
  29. ????????{??
  30. ????????????super();??
  31. ????????????init(str);??
  32. ????????}?????????????
  33. private?function?init(str:String):void??
  34. ????????????initObj(str);??
  35. ??????????????
  36. ????????????//注册帧频侦听用于不断刷新屏幕,每出现一帧就触发该事件??
  37. ????????????addEventListener(Event.ENTER_FRAME,onEnterFrame);??
  38. ??????????????
  39. ????????????addEventListener(MouseEvent.MOUSE_DOWN,?onMouseDown);??
  40. ????????????addEventListener(MouseEvent.MOUSE_UP,?onMouseUp);??
  41. ????????????//addEventListener(MouseEvent.ROLL_OVER,?onMouseUp);??????????????
  42. ????????????addEventListener(MouseEvent.MOUSE_MOVE,onMouseMove);??
  43. ????????????addEventListener(MouseEvent.MOUSE_WHEEL,onMouseWheel);??
  44. ????????}??
  45. private?function?initObj(str:String): ????????????viewport=new?Viewport3D(700,500);??
  46. ????????????addChild(viewport);??
  47. ????????????scene?=?new?Scene3D();??
  48. ????????????camera?=?new?Camera3D();??
  49. ????????????render=new?BasicRenderEngine();??
  50. ????????????var?material:BitmapFileMaterial=new?BitmapFileMaterial(str);????
  51. //PV3D默认情况下不显示背面,doubleSided属性应设为true??
  52. ????????????material.doubleSided?=?true;??
  53. ????????????material.opposite?=?false;??
  54. ????????????material.smooth?=?//实例化球体???
  55. ????????????sphere=new?Sphere(material,0); background-color:inherit">200,0); background-color:inherit">50,0); background-color:inherit">50);??
  56. ????????????sphere.scaleX?=?sphere.scaleX*(-1);??
  57. ????????????scene.addChild(sphere);??
  58. //把摄像机移到中心位置,PV3D摄像机的默认位置是camera.z=-1000??
  59. ????????????camera.z=0;??
  60. //摄象机的缩放参数,??
  61. ????????????camera.zoom=.8;??
  62. //摄象机的焦距??
  63. ????????????camera.focus=300;??
  64. ????????????render.renderScene(scene,?camera,?viewport);??
  65. //this.useHandCursor?=?true;显示为手型??
  66. //this.buttonMode?=?true;??
  67. private?function?onEnterFrame(e:Event): ????????{?????
  68. ????????????render.renderScene(scene,?viewport);??
  69. ????????}??
  70. ??????????
  71. private?function?onMouseDown(event:MouseEvent):void??
  72. ????????{??
  73. ????????????myMouseDown?=?true;??
  74. this.OldMouseX?=?this.mouseX;??
  75. ????????????this.OldMouseY?=?this.mouseY;??
  76. private?function?onMouseUp(event:MouseEvent): ????????????myMouseDown?=?this.OldMouseX?=?-this.OldMouseY?=?-private?function?onMouseMove(event:MouseEvent):if(myMouseDown)??
  77. ????????????{?????????????????
  78. ????????????????if(this.OldMouseX?<?0?||?this.OldMouseY?<?0?)??
  79. ????????????????{??
  80. ????????????????????this.mouseX;??
  81. ????????????????????this.mouseY;??
  82. ????????????????}??
  83. ????????????????else??
  84. ????????????????{??
  85. ????????????????????var?DeltaX:Number?=?this.mouseX?-?this.OldMouseX;??
  86. ????????????????????var?DeltaY:Number?=?this.mouseY?-?this.OldMouseY;??
  87. ????????????????????camera.rotationY?+=?DeltaX*0.5;??
  88. ????????????????????camera.rotationX?+=?DeltaY*0.5;??
  89. ??????????????????????
  90. if?(camera.rotationX?<=?-90)??
  91. ????????????????????{??
  92. ????????????????????????camera.rotationX?=?-90;??
  93. ????????????????????}??
  94. else?if?(camera.rotationX?>=? ????????????????????????camera.rotationX?=? ????????????????????render.renderScene(scene,248); line-height:17.600000381469727px; margin:0px!important; padding:0px 3px 0px 10px!important"> ????????????????}?????????????????
  95. ????????????}??
  96. private?function?onMouseWheel(event:MouseEvent):if(event.delta?>?0)??
  97. ????????????{??
  98. if(camera.zoom?>?0.6)??
  99. ????????????????????camera.zoom?*=?0.95;??
  100. ????????????}??
  101. if(event.delta?<?0)??
  102. ????????????{??
  103. ????????????????camera.zoom?*=?1.05;??
  104. ????}??
  105. }??

然后在一个Flex程序中使用该全景类,如下图所示:

copy

    <?xml?version="1.0"?encoding="utf-8"?>??
  1. <s:Application?xmlns:fx="http://ns.adobe.com/mxml/2009"???
  2. ???????????????xmlns:s="library://ns.adobe.com/flex/spark"???
  3. ???????????????xmlns:mx="library://ns.adobe.com/flex/mx"?minWidth="955"?minHeight="600"??
  4. ???????????????creationComplete="App_creationCompleteHandler(event)"?>??
  5. ????<fx:Script>??
  6. ????????<![CDATA[??
  7. import?mx.core.UIComponent;??
  8. import?mx.events.FlexEvent;??
  9. protected?function?App_creationCompleteHandler(event:FlexEvent): ????????????????//?TODO?Auto-generated?method?stub??
  10. this.CreatePV3D();??
  11. ??????????????????
  12. private?function?CreatePV3D(): ????????????????var?Path:String?=?"../Images/pv3d.jpg";??
  13. ????????????????var?iPV3D:MyPV3D?=?new?MyPV3D(Path);??
  14. ????????????????var?iUI:UIComponent?=?new?UIComponent();??
  15. ????????????????iUI.addChild(iPV3D);??
  16. ????????????????iCanvas.addChild(iUI);??
  17. ????????]]>??
  18. ????</fx:Script>??
  19. ????<fx:Declarations>??
  20. ????????<!--?将非可视元素(例如服务、值对象)放在此处?-->??
  21. ????</fx:Declarations>??
  22. ????<mx:Canvas?id="iCanvas"?width="700"?height="500"/>??
  23. </s:Application>??

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读