最近研究打算做个全景的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;
}
}

基于Away3D实现全景的相机控制器。的更多相关文章

  1. 基于VR三维全景的虚拟展馆展览实现

    VR三维全景虚拟现实技术的应用,能够通过全方位互动式来还原真实场景,令人产生一种身临其境的感觉,由于三维全景虚拟现实技术具有一定应用优势,其在企业与院校展示.建筑规划展示.酒店宾馆展示等方面都逐步得到 ...

  2. 基于MIG IP核的DDR3控制器(一)

    最近学习了DDR3控制器的使用,也用着DDR完成了一些简单工作,想着以后一段可能只用封装过后的IP核,可能会忘记DDR3控制器的一些内容,想着把这个DDR控制器的编写过程记录下来,便于我自己以后查看吧 ...

  3. 基于USB3.0的双目相机测试小结之CC1605配合CS5642 双目 500w摄像头

    基于USB3.0的双目相机测试小结之CC1605配合CS5642  双目 500w摄像头 CC1605双目相机评估板可以配合使用柴草电子绝大多数摄像头应用 如:OV5640.OV5642.MT9P03 ...

  4. 基于MIG IP核的DDR3控制器(二)

    上一节中,记录到了ddr控制器的整体架构,在本节中,准备把ddr控制器的各个模块完善一下. 可以看到上一节中介绍了DDR控制器的整体架构,因为这几周事情多,又要课设什么的麻烦,今天抽点时间把这个记录完 ...

  5. 图像处理之全景拼接---基于sift的全景图像拼接

    http://blog.csdn.net/masibuaa/article/details/9246493#comments

  6. 基于fpga的256m的SDRAM控制器

    2018/7/26 受教于邓堪文老师,开始真真学习控制sdram 由于自己买的sdram模块是256的,原来老师的是128,所以边学边改,不知道最后好不好使,但是我有信心 一.sdram的初始化 sd ...

  7. Away3D引擎学习笔记(二)CameraController相机控制的应用

    cameraController---相机控制器 这里针对Away3D里面封装的CameraController的区别和使用做些简单介绍.相机控制器的设计思路比较清晰,所以难点东西不多.使用方面附上源 ...

  8. 相机标定:PNP基于单应面解决多点透视问题

              利用二维视野内的图像,求出三维图像在场景中的位姿,这是一个三维透视投影的反向求解问题.常用方法是PNP方法,需要已知三维点集的原始模型. 本文做了大量修改,如有不适,请移步原文:  ...

  9. 2014.04.28基于CPLD的LCOS场序彩色视频控制器设计

    基于CPLD的LCOS场序彩色视频控制器设计 作者:宋丹娜,代永平,刘艳艳,商广辉 发表刊物:液晶与显示,2009 学习时间:2014.04.28 文章讲述了-- (和上一篇论文有些相似之处) 1. ...

随机推荐

  1. [CF986E]Prince's Problem

    题意:给一棵带点权$w_i$的树,多次询问$(u,v,x)$,求出$\prod\limits_{i\in\text{path}(u,v)}(w_i,x)$ 因为是乘法,所以可以把路径询问拆成到根询问, ...

  2. 9.1(java学习笔记)正则表达式

    一.正则表达式 1.1正则表达式 正则表达式是描述一种规则,通过这个规则可以匹配到一类字符串. 2.1正则语法 2.1.1普通字符:字母.数字.下划线.汉字以及没有特殊意义的符号都是普通字符. 正则表 ...

  3. [Android]Android 布局中如何让图片和文字居中显示?

    图片文字居中显示 **①组件TextView的属性 drawableTop ``` <LinearLayout android:layout_width="match_parent&q ...

  4. mysql用unix时间戳统计一个日期段的数据

    select DATE_FORMAT(FROM_UNIXTIME(date),'%Y-%m-%d') as d, count(*) as c from tb where (FROM_UNIXTIME( ...

  5. 如何让Adobe reader 记住上次pdf文档打开位置?

    菜单栏: Edit --> Preferences --> Documents --> 勾选 “Restore last view settings where reopening ...

  6. S3C2440时钟配置

    参考: http://blog.csdn.net/mr_raptor/article/details/6555734 http://blog.csdn.net/mjx91282041/article/ ...

  7. SpringBoot拦截器中service或者redis注入为空的问题

    原文:https://my.oschina.net/u/1790105/blog/1490098 这两天遇到SpringBoot拦截器中Bean无法注入问题.下面介绍我的思考过程和解决过程: 1.由于 ...

  8. C# 7 新特性-1

    来源https://www.kenneth-truyers.net/2016/01/20/new-features-in-c-sharp-7/ Tuples What Tuples是数据的临时分组.区 ...

  9. nginx+php-fpm页面显示空白的解决方法

    在nginx与php的环境中,配置了一个wordpress,访问时发现php的页面一直显示空白,起初以为是权限问题,将权限改成755后还是不行.   然后,开启nginx和php的日志,但在日志里也没 ...

  10. redis深入研究

    Redis 设计思路学习与总结 https://cloud.tencent.com/developer/article/1004464 Redis 设计思路学习与总结 下半年利用空余时间研究和分析了部 ...