Away3D基础教程(五):制作全景功能
2013-02-16 13:52
507 查看
效果如下:
制作思路:
1:全景功能其实就是在一个球体内部贴上一张鱼眼全景图片,然后把摄像机放在球体内部中心点,旋转摄像机就可以实现全景效果了。因为全景图要贴到球的内部,所以要把球体的双面贴图功能打开,_SphereGeometry.bothSides = true; 还有一种skyBox贴上6张不同面的全景图制作方法不在此做介绍,全景功能还是用球体方便。
2:使用HoverController这个摄像机控制类, 摄像机围绕球体原点旋转。这个我们经常用来坐360度环绕某点查看某3D物体。或者制作360度全景图。
2:把camera放到球体内部,_view.camera.position = _mesh.position; 设置camera的位置为球体的中心位置,在这里把球体放在了_mesh对象里,所以_mesh的中心位置就是球体的中心位置。
3:鼠标按下并移动开始旋转球体:
完整代码如下:
制作思路:
1:全景功能其实就是在一个球体内部贴上一张鱼眼全景图片,然后把摄像机放在球体内部中心点,旋转摄像机就可以实现全景效果了。因为全景图要贴到球的内部,所以要把球体的双面贴图功能打开,_SphereGeometry.bothSides = true; 还有一种skyBox贴上6张不同面的全景图制作方法不在此做介绍,全景功能还是用球体方便。
2:使用HoverController这个摄像机控制类, 摄像机围绕球体原点旋转。这个我们经常用来坐360度环绕某点查看某3D物体。或者制作360度全景图。
2:把camera放到球体内部,_view.camera.position = _mesh.position; 设置camera的位置为球体的中心位置,在这里把球体放在了_mesh对象里,所以_mesh的中心位置就是球体的中心位置。
3:鼠标按下并移动开始旋转球体:
_cameraHoverController.panAngle = (mouseX - _mouseX) * .3 + _startX; _cameraHoverController.tiltAngle = (mouseY - _mouseY) * .3 + _startY;
完整代码如下:
package { import away3d.containers.View3D; import away3d.controllers.HoverController; import away3d.entities.Mesh; import away3d.materials.TextureMaterial; import away3d.primitives.SphereGeometry; import flash.display.Loader; import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.display.StageAlign; import flash.display.StageScaleMode; import away3d.utils.Cast; import away3d.tools.helpers.MeshHelper; import flash.text.TextField; import flash.text.TextFieldAutoSize; /** * ... * @author yl */ [SWF(width='800',height='600',frameRate="60", backgroundColor="0x000000")] public class MyAway3d_5 extends Sprite { [Embed(source = "../embeds/ball.jpg")] private static var BallMaterial:Class;private var _startX:Number; private var _startY:Number; private var _mouseX:Number; private var _mouseY:Number; private var _view:View3D; private var _cameraHoverController:HoverController; private var _sphere:SphereGeometry; private var _sphereMaterial:TextureMaterial; private var _mesh:Mesh;public function MyAway3d_5() { if (stage) { init(); }else { this.addEventListener(Event.ADDED_TO_STAGE, init); } }private function init(e:Event = null):void { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; this.removeEventListener(Event.ADDED_TO_STAGE, init); _view = new View3D(); addChild(_view); _view.antiAlias = 6; //摄像机渲染范围2000 _view.camera.lens.far = 2000; _cameraHoverController = new HoverController(_view.camera, null, 90, 0, 300); _cameraHoverController.yFactor = 1; _sphere = new SphereGeometry(1000, 64); //_sphere.yUp = false; _sphereMaterial = new TextureMaterial(Cast.bitmapTexture(BallMaterial)); _sphereMaterial.bothSides = true; _sphereMaterial.smooth = true; _mesh = new Mesh(_sphere, _sphereMaterial); //MeshHelper.invertFaces(_mesh); _view.camera.position = _mesh.position; _view.scene.addChild(_mesh);this.addEventListener(Event.ENTER_FRAME, onEnterFrame); stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownFunction); stage.addEventListener(MouseEvent.MOUSE_WHEEL, onWheel); }private function onWheel(e:MouseEvent):void { if (e.delta > 0) { if (_cameraHoverController.distance > 6) { _cameraHoverController.distance -= 5; } }else if (e.delta < 0) { if (_cameraHoverController.distance < 600) { _cameraHoverController.distance += 5; } } } private function mouseDownFunction(e:MouseEvent):void { _startX = _cameraHoverController.panAngle; _startY = _cameraHoverController.tiltAngle; _mouseX = mouseX; _mouseY = mouseY; stage.addEventListener(MouseEvent.MOUSE_MOVE,mouseMoveFunction); stage.addEventListener(MouseEvent.MOUSE_UP,mouseUpFunction); } private function mouseUpFunction(e:MouseEvent):void { stage.removeEventListener(MouseEvent.MOUSE_MOVE,mouseMoveFunction); stage.removeEventListener(MouseEvent.MOUSE_UP,mouseUpFunction); //stage.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownFunction); } private function mouseMoveFunction(e:MouseEvent):void { _cameraHoverController.panAngle = (mouseX - _mouseX) * .3 + _startX; _cameraHoverController.tiltAngle = (mouseY - _mouseY) * .3 + _startY; } private function onEnterFrame(e:Event):void { _view.render(); } } }
相关文章推荐
- 免费全景摄影制作教程 - 摄影基础知识
- Daydream VR入门基础教程,通过GVR示例SimpleVrPanorama制作VR全景图形应用
- 零基础HTML5游戏制作教程 第1章
- 【网站制作视频教程】-第12讲 html表单应用基础!-传智播客
- NSIS安装制作基础教程
- 方正BPM工作流基础级培训视频教程(各功能组件+小型项目开发)
- Away3D基础教程(六):支持双面交互的PlaneGeometry
- Bootstrap 教程第四课:制作一组功能图标按钮
- (转)jquery傻瓜基础教程之教你如何制作jquery插架一
- 易语言基础教程之制作简易浏览器
- krpano添加热点-AR,VR全景视图制作教程(2)
- 【Unity3D基础教程】(三):通过制作Flappy Bird了解Native 2D
- [Away 3D] Away3D4.0入门教程(1)--这个世界的基础
- FATAL ERROR:tour.xml-loading failed(0)的解决办法-AR,VR全景视图制作教程(3)
- 斯坦福大学公开课:iPhone开发教程2010年冬> 各种基础的类,功能,对象和实例的介绍
- 零基础HTML5游戏制作教程 第5章 碰撞检测
- Unity3d基础教程7-灯光(灯光阴影参数设置及lightmapping制作)
- MVC4制作网站教程第四章 部分栏目功能实现代码
- 关于ansible基础入门和功能实现教程的更新页面
- HTML网页制作基础教程