最近研究打算做个全景的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. 设置参数进行java的jvm监控

    1.设置jconsole监控服务器的tomcat参数及java jvm大小,执行命令vi ../tomcat/bin/catalina.sh  “在服务器安装的tomcat目录下” JAVA_OPTS ...

  2. Java高级架构师(一)第26节:测试并调整登录的业务功能

    主Index的处理Java: package com.sishuok.architecture1; import org.springframework.beans.factory.annotatio ...

  3. Jackson使用ObjectManage#readValue传入泛型T的问题

    说明:没找到合适的方法,持续关注这个问题 参考: https://stackoverflow.com/questions/11664894/jackson-deserialize-using-gene ...

  4. 并发的HashMap为什么会引起死循环?(转)

    本文转自http://blog.csdn.net/zhuqiuhui/article/details/51849692 今天研读Java并发容器和框架时,看到为什么要使用ConcurrentHashM ...

  5. Automatic Diagnostic Repository

    转载自 http://www.eygle.com/archives/2007/08/11g_auto_diag_repository.html#comments Oracle Database 11g ...

  6. Android--使用XMLPull解析xml

    在Android中极力推荐的xmlpull方式解析xml.xmlpull不只能够使用在Android上.相同也适用于javase,但在javase环境下.你须要自己去获取xmlpull所依赖的类库. ...

  7. 用友u8数据库表结构

    用友数据库表名参照表1 Accessaries 成套件表2 AccInformation 帐套参数表3 AdjustPVouch4 AdjustPVouchs5 Ap_AlarmSet 单位报警分类设 ...

  8. 深度增强学习--Policy Gradient

    前面都是value based的方法,现在看一种直接预测动作的方法 Policy Based Policy Gradient 一个介绍 karpathy的博客 一个推导 下面的例子实现的REINFOR ...

  9. JS断点调试

    断点调试在这种场景下能发挥很大的作用.上手这个办法也利益于我以前玩VB编程时也习惯了IDE的单步/断点调试,一般的纯Web开发入门的程序员我没看到几个会用的.其实难度不大,只是他们不懂得主动去探索 首 ...

  10. 主流浏览器CSS3和HTML5兼容性

    各大主流浏览器对 CSS3 和 HTML5 的支持越来越完善,曾经让多少前端开发人员心碎的IE系也开始拥抱标准.就在前几天,W3C的 HTML5 社区领袖 Shelley 宣布,HTML5的开发工作已 ...