日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于Away3D实现全景的相机控制器。

發布時間:2025/3/17 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Away3D实现全景的相机控制器。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ?最近研究打算做個全景的Demo,發現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实现全景的相机控制器。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。