出处:http://blog.sina.com.cn/s/blog_59f0ac9d0101ci2j.html

View3D在初始化时候就已经创建的Camera3D 所以有时候没有创建Camera3D但依然可以看到3D场景。

Camera3D的默认初始位置在x:0,y:0,c:-1000。

Camera属性:

camea.lookAt(new Vector3D).这个是让摄像机指着某点。即便摄像机移动中。也会一直指着此点。
camera.roll(angle)  摄像机绕绿色的轴线旋转
camera.pitch(angle) 摄像机绕红色的轴线旋转
amera.yaw(angle)    摄像机绕蓝色的轴线旋转

摄像机按照距离移动。

camera.moveBackward(distance)
camera.moveForward(distance);
camera.moveDown(distance);
camera.moveLeft(distance);
camera.moveRight(distance);
camera.moveUp(distance);

移动摄像机

直接设置摄像机的x,y和z属性就可。

旋转摄像机

摄像机的旋转使用它的rotationX,rotationY和rotationZ属性,和普通的三维物体相同。比如:

camera.rotationY = 10;

调整zoom和focus属性

zoom和摄像机的放大倍数密切相关。zoom越大,放大倍数也越大。

focus属性和实际镜头的焦距不同,在Away3D中,它指摄像机位置和视平面的距离。focus越小,摄像机离视平面越近,视角越宽广,类似于广角镜头,有较大的畸变

摄像机渲染距离设置
camera.lens.far=distance;

以上便是一些摄像机的基本属性。下面来说下2个我们做项目中运用最多的摄像机控制器

1:HoverController 摄像机围绕某点旋转。可以360度观看3D物体。或者制作360度全景图。
2 FirstPersonController。第一人称视角控制器。这个可以完美的模拟出以第一视角漫游。

2个控制器的基本属性相同。

targetObject. 这个是我们所要给控制器的摄像机对象。
lookAtObject:这个是HoverController 拥有的。就是我们所要环绕的对象。
panAngle:摄像机以Y轴旋转的角度
tiltAngle:摄像机以X轴旋转的角度
distance;射线机的距离。
minPanAngle:以Y轴旋转的最小角度。
minTileAngle:以X轴旋转的最小角度。
maxPanAngle:以Y轴旋转的最大角度。
maxTileAngle:以X轴旋转的最大角度。

以下2个属性是FirstPersonController 可以模拟出第一视角行走
摄像机的方向以speed速度前进
incrementWalk(speed);
以摄像机为方向的90度以speed速度前进
incrementStrafe(speed);

好了 现在我们动手以HoverController 来制作我们的全景。

简单的说下制作原理。我们这需要用一张全景图。全景图可以用skyBox那样用6个的无缝贴图来做。也可以用鱼眼镜头拍摄的360的来制作。一般6个面的无缝贴图制作难度比较高。所以更多的时候我们采用鱼眼镜头拍摄的360度全景照片来做。鱼眼镜头一般为球形镜头。所以我们这里会用一个球来贴上这个全景贴图。然后放个射线机在球类,这样基本上就能模拟出人在某地360度去观看周围。

var view:View3D=new View3D();

addChild(view);

我会创建一个半径为1000的球 所以 我让这个摄像机的渲染范围到2000。 不能低于半径。否着看不到球的表面。

view.camera.lens.far=2000;

创建一个HoverController 然后赋予view.camera 初始化tiltAngle的值为90度 这样这个是相机的初识就是平行的。摄像机到中心点距离为300

var _camerController:HoverController = new HoverController(view.camera,null,90,0,300);

一下是创建一个半径为1000 并给其赋予这个全景的位图贴图。
var sphere:SphereGeometry = new SphereGeometry(1000);

var bitmapTexture:BitmapTexture = new BitmapTexture(bitmapData);

var textureMaterial:TextureMaterial = new TextureMaterial(bitmapTexture);

Away3d的模型默认的都是单面渲染的,所以我们如果从球里看球的里边的面是看不到的。所以我将这个位图贴图双面渲染打开

textureMaterial.bothSides = true;

var mesh:Mesh = new Mesh(sphere,textureMaterial);

view.scene.addChild(mesh);

因为要用鼠标拖动去看任意方向所以我们需要通过鼠标的位移来计算角度
_startX是初始化摄像机panAngle 的值startY是初始tiltAngle 的值
mouseX是鼠标X轴移动距离
mouseY 是鼠标Y轴移动距离
_camerController.panAngle = (mouseX - _mouseX) * .3 + _startX;
_camerController.tiltAngle = (mouseY - _mouseY) * .3 + _startY;

好了 那基本就制作完成了
我们可以输出以360度来观察这个全景。是不是很身临其境啊以下是全部的代码

import flash.display.*;
import flash.events.*;
import away3d.containers.View3D;
import away3d.primitives.SphereGeometry;
import away3d.textures.BitmapTexture;
import away3d.materials.TextureMaterial;
import away3d.entities.Mesh;
import away3d.controllers.HoverController;

var _startX:Number;

var _startY:Number;

var _mouseX:Number;

var _mouseY:Number;

var view:View3D=new View3D();

addChild(view);

view.camera.lens.far=2000;

var _camerController:HoverController = new HoverController(view.camera,null,90,0,300);

var loader:Loader=new Loader();

var bitmapData:quanjing=new quanjing();//贴图自己定义

var sphere:SphereGeometry = new SphereGeometry(1000);

var bitmapTexture:BitmapTexture = new BitmapTexture(bitmapData);

var textureMaterial:TextureMaterial = new TextureMaterial(bitmapTexture);

textureMaterial.bothSides = true;

var mesh:Mesh = new Mesh(sphere,textureMaterial);

view.scene.addChild(mesh);

stage.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownFunction);

function mouseDownFunction(evt:MouseEvent):void
{
_startX = _camerController.panAngle;
_startY = _camerController.tiltAngle;
_mouseX = mouseX;
_mouseY = mouseY;
stage.addEventListener(MouseEvent.MOUSE_MOVE,mouseMoveFunction);
stage.addEventListener(MouseEvent.MOUSE_UP,mouseUpFunction);
}

function mouseMoveFunction(evt:MouseEvent):void
{
_camerController.panAngle = (mouseX - _mouseX) * .3 + _startX;
_camerController.tiltAngle = (mouseY - _mouseY) * .3 + _startY;
}

function mouseUpFunction(evt:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE,mouseMoveFunction);
stage.removeEventListener(MouseEvent.MOUSE_UP,mouseUpFunction);
stage.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownFunction);
}

addEventListener(Event.ENTER_FRAME,enterFrameFunction);

function enterFrameFunction(evt:Event):void
{
view.render();
}

Away 3d 基本属性的更多相关文章

  1. CSS3 基本属性 浅析(含选择器、背景阴影、3D转换、动画等)

    1渐进增强原则 2私有前缀  不同浏览器在发布不同版本(一般测试版)时会加前缀,新增属性加上前缀进行支持测试:     Chrome浏览器:-webkit-border-radius: 5px;   ...

  2. Material Design 概念,环境和基本属性

    Material Design 概念,环境和基本属性 Material Design是随Android 5.0推出的一种设计概念, 涉及到了跨平台和设备的视觉,动态,交互设计等方面.   设计概念 M ...

  3. C#-WinForm-客户端程序-Form基本属性

    WinForm - 客服端程序(C/S) WindowsForm 的简称 客户端应用程序:是需要安装在用户电脑上才可以使用的程序,代码部分在用户电脑上执行 特点:不需要联网也可以打开使用部分功能,但现 ...

  4. jQuery实现3D幻灯片

    先看下效果图: 看到这个酷炫的效果有没有很眼馋啊!接下来我们就一起来学习实现它吧. 1.看到效果后我们先分析这个dom要怎么实现! 首先我们要用一个大容器包裹内容,其次这个看起来像是3d效果的图片实际 ...

  5. Unity项目 - 坦克大战3D TankBattle

    目录 游戏原型 项目演示 绘图资源 代码实现 技术探讨 参考来源 游戏原型 游戏玩法:在有界的战场上,玩家将驾驶坦克,代表绿色阵营,与你的队友一起击溃红蓝阵营的敌人,在这场三方大战中夺得胜利! 操作指 ...

  6. tkinter入门-按钮的基本属性

    1.  尺寸的大小  ipadx 和 ipady import tkinter root = tkinter.Tk() root.minsize(500, 500) # 基本属性 # 按钮组件 # 绝 ...

  7. 工业互联网可视化系统风格的抉择:线框模式之 3D 数据中心机房的实现

    前言 3D 可视化,就是把复杂抽象的数据信息,以合适的视觉元素及视角去呈现,方便系统的展示.维护和管理.而在可视化系统的搭建选择上,所呈现的风格样式效果多种多样,各自所突出的适用场合也不尽相同.对于科 ...

  8. 手搓一个“七夕限定”,用3D Engine 5分钟实现烟花绽放效果

    七夕来咯!又到了给重要的人送惊喜的时刻. 今年,除了将心意融入花和礼物,作为程序员,用自己的代码本事手搓一个技术感十足"七夕限定"惊喜,我觉得,这是不亚于车马慢时代手写信的古典主义 ...

  9. 程序员的专属浪漫——用3D Engine 5分钟实现烟花绽放效果

    谁说程序员不懂浪漫? 作为程序员,用自己的代码本事手搓一个技术感十足的惊喜,我觉得,这是不亚于车马慢时代手写信的古典主义浪漫. 那么,应该怎样创作出具有自我身份属性的浪漫惊喜呢? 玩法很多,今天给大家 ...

随机推荐

  1. iis服务器上面使用百度编辑器ueidtor提示“找不到临时文件”需要给window/temp修改权限

    iis服务器上面使用百度编辑器ueidtor提示“找不到临时文件”需要给window/temp修改权限,修改php上传临时文件window/temp 给user用户组读取和写入的权限

  2. CentOS6.2编译gcc失败,kernel-headers错误

    准备转移到阿里云服务器,用的CentOS6.2 x64,虚拟机上用的 6.3版本,测试重装了好几次都没问题了,结果在云服务器上刚开始就出问题了... yum 安装的时候居然出错了,靠...网上 goo ...

  3. DOS下导入导出MySQL备份

    导入: 1. cd d:\mysql\bin #cd 到 mysql 的 bin 目录下 2. mysql -u root -p mysql_db_name < d:\mysql\data\ba ...

  4. .net技术深入

    程序集(Assembly),可以看做是一堆相关类打一个包,相当于java中的jar包(*).打包的目的:程序中只引用必须的程序集,减小程序的尺寸:一些程序集内部的类不想让其他程序集调用. 我们调用的类 ...

  5. 生成扫描二维码下载app的二维码的方法

    进入APP store苹果应用程序商店,根据分类找到你要生成二维码的APP,然后在浏览器连接里找到ID后的一串数字就是APP的应用ID了. 安卓系统的appid 在电脑浏览器中打开应用宝官网,http ...

  6. iOS开发中怎么样使用激光推送

    1.注册激光推送的账号 ----> 创建应用 2.上传推送测试和发布的p12文件  注意密码的填写 3.下载sdk并拖进工程里 4.在build setting 搜索search   把路径改一 ...

  7. ggplot2 geom设置—散点图

    散点图也是目前R中的常用的图形之一 geom_point(mapping = NULL, data = NULL, stat = "identity", position = &q ...

  8. 14.hibernate的反向生成实现全套增删改查

    图片顺序就是步骤顺序 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.

  9. 感知哈希算法 python 3.4

    #!/usr/bin/python # -*- coding: UTF-8 -*- #Less than 10 add to list and sort import glob import os i ...

  10. 【Linux】zookeeper构造伪集群

    1.在一台机器装安装3个zk server,构建伪集群模式安装步骤如下:1.下载zookeeper,下载地址:http://mirror.bit.edu.cn/apache/zookeeper/zoo ...