·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]as3实现拖拽改变摄像头角度

时间:2016-03-08 14:03酷播
[AS3]as3实现拖拽改变摄像头角度

[AS3]as3实现拖拽改变摄像头角度

1,下面通过一个更复杂的样例,演示Away3D的使用
(1)舞台中央添加一个地板,地板上方放置一个方块。方块与地板间有一段距离。
(2)地板和方块使用不同的纹理皮肤。
(3)默认摄像头的角度是沿x轴倾斜15度。
(4)按住鼠标左键拖动视图可以改变摄像头的视角,鼠标滚轮可以改变摄像头远近距离。
(5)整个舞台随窗口大小改变,一直保持全屏。
(6)添加抗锯齿设置,使物体边缘更加平滑。 
 
2,效果图如下:
原文:Away3D - 更复杂的例子(支持拖拽改变摄像头角度)
 
3,代码如下:
 
  1. package{ 
  2.     import flash.display.Sprite; 
  3.     import flash.display.StageAlign; 
  4.     import flash.display.StageScaleMode; 
  5.     import flash.events.Event; 
  6.     import flash.events.MouseEvent; 
  7.     import flash.geom.Vector3D; 
  8.       
  9.     import away3d.containers.View3D; 
  10.     import away3d.controllers.HoverController; 
  11.     import away3d.entities.Mesh; 
  12.     import away3d.materials.TextureMaterial; 
  13.     import away3d.primitives.CubeGeometry; 
  14.     import away3d.utils.Cast; 
  15.       
  16.     [SWF(frameRate="60"backgroundColor="#FFFFFF")] 
  17.     public class S3 extends Sprite { 
  18.           
  19.         private  var _view3D:View3D; 
  20.         private var cameraController:HoverController;//360全景展示相机控制器 
  21.           
  22.         //物体 图片(用作方块 的纹理 ) 
  23.         [Embed(source="assets/snow_diffuse.png")] 
  24.         private var blockClass:Class; 
  25.           
  26.         //地板图片(用作地板的纹理 ) 
  27.         [Embed(source="assets/road.jpg")] 
  28.         private var floorClass:Class; 
  29.           
  30.         //物体材质 
  31.         private var blockMaterial:TextureMaterial; 
  32.           
  33.         //地板材质 
  34.         private var floorMaterial:TextureMaterial; 
  35.           
  36.         private var _lastX:Number = 0
  37.         private var _lastY:Number = 0
  38.           
  39.         public function S3() { 
  40.             initEngine(); 
  41.             initMaterials(); 
  42.             initObjects(); 
  43.             initListeners(); 
  44.         } 
  45.           
  46.         /** 
  47.          * 初始化引擎 
  48.          */ 
  49.         private function initEngine():void 
  50.         { 
  51.             stage.scaleMode = StageScaleMode.NO_SCALE; 
  52.             stage.align = StageAlign.TOP_LEFT; 
  53.               
  54.             // 创建一个视口 
  55.             _view3D = new View3D(); 
  56.             _view3D.antiAlias = 4; //设置抗锯齿级别 
  57.               
  58.             //初始化摄像头 
  59.             cameraController = new HoverController(_view3D.camera); 
  60.             /*cameraController.distance = 1000
  61.             cameraController.minTiltAngle = 0
  62.             cameraController.maxTiltAngle = 90
  63.             cameraController.panAngle = 45;*/ 
  64.             cameraController.tiltAngle = 15
  65.               
  66.             addChild(_view3D); 
  67.         } 
  68.           
  69.         /** 
  70.          * 初始化材质 
  71.          */ 
  72.         private function initMaterials():void 
  73.         { 
  74.             //地板的纹理 
  75.             floorMaterial = new TextureMaterial(Cast.bitmapTexture(floorClass)); 
  76.             //方块 的纹理 
  77.             blockMaterial = new TextureMaterial(Cast.bitmapTexture(blockClass)); 
  78.         } 
  79.           
  80.         /** 
  81.          * 初始化物体 
  82.          */ 
  83.         private function initObjects():void 
  84.         { 
  85.             // 在三维舞台中创建一个方块(地板 ) 
  86.             var cube1:Mesh = new Mesh(new CubeGeometry(700, 20, 500), floorMaterial); 
  87.             _view3D.scene.addChild(cube1); 
  88.               
  89.             // 在三维舞台中创建一个方块(地板上的 方块 ) 
  90.             var cube2:Mesh = new Mesh(new CubeGeometry(200, 70, 200), blockMaterial); 
  91.             cube2.position = new Vector3D(0,100,0); 
  92.             _view3D.scene.addChild(cube2); 
  93.         } 
  94.           
  95.         /** 
  96.          * 初始化监听 
  97.          */ 
  98.         private function initListeners():void 
  99.         { 
  100.             addEventListener(Event.ENTER_FRAME, _onEnterFrame); 
  101.             //鼠标事件监听 
  102.             stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); 
  103.             stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp); 
  104.             stage.addEventListener(MouseEvent.MOUSE_WHEEL,onWheel); 
  105.             stage.addEventListener(Event.RESIZE, onResize); 
  106.             onResize(); 
  107.         } 
  108.           
  109.         /** 
  110.          * 渲染视图 
  111.          */ 
  112.         private function _onEnterFrame(e:Event):void 
  113.         { 
  114.             //渲染视图 
  115.             _view3D.render(); 
  116.         } 
  117.           
  118.         /** 
  119.          * 使用舞台大小一直全屏 
  120.          */ 
  121.         private function onResize(event:Event = null):void 
  122.         { 
  123.             _view3D.width = stage.stageWidth; 
  124.             _view3D.height = stage.stageHeight; 
  125.         } 
  126.           
  127.         /** 
  128.          * 鼠标滚轮事件 
  129.          */ 
  130.         private function onWheel(e:MouseEvent):void 
  131.         { 
  132.             if(e.delta > 0){ 
  133.                 if(cameraController.distance < 1000
  134.                     cameraController.distance += 100; 
  135.             }else{ 
  136.                 if(cameraController.distance > 600) 
  137.                     cameraController.distance -100
  138.             } 
  139.         } 
  140.           
  141.         /** 
  142.          * 鼠标按下事件 
  143.          */ 
  144.         private function onMouseDown(event:MouseEvent):void 
  145.         { 
  146.             _view3D.stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); 
  147.             _lastX = _view3D.mouseX; 
  148.             _lastY = _view3D.mouseY; 
  149.         } 
  150.           
  151.         /** 
  152.          * 鼠标弹起事件 
  153.          */ 
  154.         private function onMouseUp(event:MouseEvent):void 
  155.         { 
  156.             _view3D.stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); 
  157.         } 
  158.           
  159.         /** 
  160.          * 鼠标移动事件 
  161.          */ 
  162.         private function mouseMoveHandler(event:MouseEvent):void 
  163.         { 
  164.             //移动摄像机 
  165.             var dx:Number = _view3D.mouseX - _lastX; 
  166.             var dy:Number = _view3D.mouseY - _lastY; 
  167.               
  168.             cameraController.panAngle += dx; 
  169.             cameraController.tiltAngle += dy; 
  170.               
  171.             _lastX = _view3D.mouseX; 
  172.             _lastY = _view3D.mouseY; 
  173.   
  174.         } 
  175.     } 

[AS3]as3实现拖拽改变摄像头角度

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器