基于Away3D实现全景的相机控制器。
生活随笔
收集整理的這篇文章主要介紹了
基于Away3D实现全景的相机控制器。
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
? ?最近研究打算做個全景的Demo,發(fā)現(xiàn)Away3D本身的天空盒跟全景屬于兩種完全不同東西。最后只能基于HoverController來擴展(原因是HoverController能提供的距離控制,類似拉近拉遠的效果)等不夠好用。下面直接貼出擴展的代碼,命名RotateController。
? ?其實也就是在HoverController的基礎上添加了對distance的距離判斷,添加了對負值的顯示控制..
package away3d.controllers {import away3d.core.math.MathConsts;import away3d.core.render.PositionRenderer;import away3d.entities.Entity;import flash.geom.Matrix3D;import flash.geom.Vector3D;public class RotateController extends ControllerBase{private var _distance:Number = 100;private var _panAngle:Number = 0;private var _tiltAngle:Number = 0;private var _currentTiltAngle:Number = 0;private var _currentPanAngle:Number = 0;public function RotateController(targetObject:Entity=null){super(targetObject);}override public function update(interpolate:Boolean=false):void{if (_invalid) {_invalid = false;if (_panAngle < 0) {_currentPanAngle += _panAngle%360 + 360 - _panAngle;_panAngle = _panAngle%360 + 360;} else {_currentPanAngle += _panAngle%360 - _panAngle;_panAngle = _panAngle%360;}while (_panAngle - _currentPanAngle < -180)_currentPanAngle -= 360;while (_panAngle - _currentPanAngle > 180)_currentPanAngle += 360;_currentPanAngle = _panAngle;_currentTiltAngle = _tiltAngle;if(targetObject){var tempMatrix3d:Matrix3D = targetObject.transform;tempMatrix3d.identity();tempMatrix3d.appendRotation(_currentTiltAngle, Vector3D.X_AXIS);tempMatrix3d.appendRotation(_currentPanAngle, Vector3D.Y_AXIS);var pos:Vector3D = new Vector3D;pos.x = distance*Math.sin(_currentPanAngle*MathConsts.DEGREES_TO_RADIANS)*Math.cos(_currentTiltAngle*MathConsts.DEGREES_TO_RADIANS);pos.z = distance*Math.cos(_currentPanAngle*MathConsts.DEGREES_TO_RADIANS)*Math.cos(_currentTiltAngle*MathConsts.DEGREES_TO_RADIANS);pos.y = distance*Math.sin(_currentTiltAngle*MathConsts.DEGREES_TO_RADIANS);tempMatrix3d.appendTranslation(pos.x, -pos.y, pos.z);targetObject.transform = tempMatrix3d;}}}public function get distance():Number{return _distance;}public function set distance(value:Number):void{_distance = value;_invalid = true;notifyUpdate();}public function get panAngle():Number{return _panAngle;}public function set panAngle(value:Number):void{_panAngle = value;_invalid = true;notifyUpdate();}public function get tiltAngle():Number{return _tiltAngle;}public function set tiltAngle(value:Number):void{_tiltAngle = Math.max(-90, Math.min(90, value));_invalid = true;notifyUpdate();}private var _invalid:Boolean = false;} }?
轉載于:https://www.cnblogs.com/xignzou/p/3603544.html
總結
以上是生活随笔為你收集整理的基于Away3D实现全景的相机控制器。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux安全加固(2)
- 下一篇: Xshell远程访问工具及epel-re