基于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;
- }
- }
基于Away3D实现全景的相机控制器。的更多相关文章
- 基于VR三维全景的虚拟展馆展览实现
VR三维全景虚拟现实技术的应用,能够通过全方位互动式来还原真实场景,令人产生一种身临其境的感觉,由于三维全景虚拟现实技术具有一定应用优势,其在企业与院校展示.建筑规划展示.酒店宾馆展示等方面都逐步得到 ...
- 基于MIG IP核的DDR3控制器(一)
最近学习了DDR3控制器的使用,也用着DDR完成了一些简单工作,想着以后一段可能只用封装过后的IP核,可能会忘记DDR3控制器的一些内容,想着把这个DDR控制器的编写过程记录下来,便于我自己以后查看吧 ...
- 基于USB3.0的双目相机测试小结之CC1605配合CS5642 双目 500w摄像头
基于USB3.0的双目相机测试小结之CC1605配合CS5642 双目 500w摄像头 CC1605双目相机评估板可以配合使用柴草电子绝大多数摄像头应用 如:OV5640.OV5642.MT9P03 ...
- 基于MIG IP核的DDR3控制器(二)
上一节中,记录到了ddr控制器的整体架构,在本节中,准备把ddr控制器的各个模块完善一下. 可以看到上一节中介绍了DDR控制器的整体架构,因为这几周事情多,又要课设什么的麻烦,今天抽点时间把这个记录完 ...
- 图像处理之全景拼接---基于sift的全景图像拼接
http://blog.csdn.net/masibuaa/article/details/9246493#comments
- 基于fpga的256m的SDRAM控制器
2018/7/26 受教于邓堪文老师,开始真真学习控制sdram 由于自己买的sdram模块是256的,原来老师的是128,所以边学边改,不知道最后好不好使,但是我有信心 一.sdram的初始化 sd ...
- Away3D引擎学习笔记(二)CameraController相机控制的应用
cameraController---相机控制器 这里针对Away3D里面封装的CameraController的区别和使用做些简单介绍.相机控制器的设计思路比较清晰,所以难点东西不多.使用方面附上源 ...
- 相机标定:PNP基于单应面解决多点透视问题
利用二维视野内的图像,求出三维图像在场景中的位姿,这是一个三维透视投影的反向求解问题.常用方法是PNP方法,需要已知三维点集的原始模型. 本文做了大量修改,如有不适,请移步原文: ...
- 2014.04.28基于CPLD的LCOS场序彩色视频控制器设计
基于CPLD的LCOS场序彩色视频控制器设计 作者:宋丹娜,代永平,刘艳艳,商广辉 发表刊物:液晶与显示,2009 学习时间:2014.04.28 文章讲述了-- (和上一篇论文有些相似之处) 1. ...
随机推荐
- HDOJ 4812 D Tree
Discription There is a skyscraping tree standing on the playground of Nanjing University of Science ...
- 【数论】【欧拉函数】bzoj2190 [SDOI2008]仪仗队
由图可知,一个人无法被看到时,当且仅当有 人与原点 的斜率与他相同,且在他之前. ∴一个人可以被看到,设其斜率为y/x,当且仅当y/x不可再约分,即gcd(x,y)=1. 考虑将图按对角线划分开,两部 ...
- Java高级架构师(一)第11节:Mybatis的分页实现
- Androids中数据库的使用SQLite
(一) 知识点: SQLite3支持的数据类型:NULL,INTEGER,REAL(浮点数字),TEXT(字符串文本),BLOB(二进制对象),虽然他支持的类型只有五种,但实际上sqlite3也接受v ...
- 从cmd连接mysql数据库控制台
在cmd中进入mysql安装目录的bin目录然后执行命令 mysql -uuser -ppassword database比如用户名为root,密码为mysql,数据库为test命令如下mysql - ...
- Linux下Shell脚本替换换行符(转)
说明:过滤换行符确实有点吭,不是那么好弄.处理文本时需要将换行符替换为空格,若使用sed命令会比较麻烦,而使用tr命令非常方便. 输入文本(country.txt) China America Fra ...
- 谁说 JavaScript 很简单了?
转载请注明出处,保留原文链接以及作者信息 本文介绍了 JavaScript 初学者应该知道的一些技巧和陷阱.如果你是老司机,就当做回顾了,哪里有写的不好的地方欢迎指出. 1. 你是否尝试过对一个数字数 ...
- linux如何启动/停止/重启MySQL
如何启动/停止/重启MySQL 一.启动方式 1.使用 service 启动:service mysqld start2.使用 mysqld 脚本启动:/etc/inint.d/mysqld star ...
- jquery如何判断元素是否被点击、属性操作、class操作
1.通过点击事件发生后,改变标志位的值,记录点击状态 function(){ var isClick = false; $('#test').click(function(){isClick = tr ...
- ubuntu16.04_install_saltstack_更新版本
一.ubuntu16.04版本,安装saltstack 参考官方文档: https://repo.saltstack.com/#ubuntu 二.安装方法 Installs the latest re ...