Class: CameraController
THING~ CameraController
摄像机类,通过 app.camera 获取摄像机对象
new CameraController()
Members
dampingFactor :Number
设置/获取 摄像机惯性插值因子,数值越小插值效果越明显
Type:
- Number
distance :Number
设置/获取 摄像机镜头和观察点的距离
Type:
- Number
distanceLimited :Array.<Number>
设置/获取 摄像机距离范围[最小值, 最大值]
Type:
- Array.<Number>
enablePan :Boolean
设置/获取 是否开启默认平移操作
Type:
- Boolean
Example
// 关闭默认的鼠标右键平移操作app.camera.enablePan = false;
enableRotate :Boolean
设置/获取 是否开启默认的旋转操作
Type:
- Boolean
Example
// 关闭默认的鼠标左键旋转操作app.camera.enableRotate = false;
enableZoom :Boolean
设置/获取 是否开启默认缩放操作
Type:
- Boolean
Example
// 关闭默认的鼠标滚轮缩放操作app.camera.enableZoom = false;
far :Number
设置/获取 摄像机远裁剪面的距离,超过这个距离的物体将不会被看到
Type:
- Number
Example
app.camera.far = 100;
flying :Boolean
获取摄像机是否在飞行
Type:
- Boolean
fov :Number
设置/获取 摄像机FOV 值越大,视野越大 默认值为 60
Type:
- Number
Example
app.camera.fov = 90;
inputEnabled :Boolean
设置/获取 是否开启默认的摄像机交互操作
Type:
- Boolean
Example
// 关闭默认的摄像机交互操作(包括 旋转、平移、缩放)app.camera.inputEnabled = false
keyPanSpeed :Number
设置/获取 摄像机键盘平移速度 默认值为 0.1
Type:
- Number
mousePanSpeed :Number
设置/获取 摄像机鼠标平移速度 默认值为 0.1
Type:
- Number
near :Number
设置/获取 摄像机近裁剪面的距离,比这个距离近的物体将不会被看到
Type:
- Number
Example
app.camera.near = 1;
position :Array.<number>
设置/获取摄像机 镜头位置(眼睛位置)
Type:
- Array.<number>
Example
app.camera.position = [10,10,10]
projectionType :CameraProjectionType|String
设置/获取 摄像机投影类型 默认为透视投影
Type:
- CameraProjectionType | String
Example
// 透视投影app.camera.projectionType = THING.CameraProjectionType.Perspective;// 正射投影app.camera.projectionType = THING.CameraProjectionType.Orthographic;
rotateSpeed :Number
设置/获取 摄像机旋转速度
Type:
- Number
target :Array.<number>
设置/获取摄像机 目标点位置
Type:
- Array.<number>
Example
app.camera.target = [0,0,0]
up :Array.<number>
设置/获取 摄像机 UP 方向 默认值为 [0,1,0]
Type:
- Array.<number>
viewMode :CameraView|Number
设置/获取 视图默认(2D/3D视图) 默认为 3D 视图
Type:
- CameraView | Number
Example
// 设置为 2D 顶视图app.camera.viewMode = THING.CameraView.TopView;// 设置为 3D 视图app.camera.viewMode = THING.CameraView.Normal;
xAngleLimitRange :Array.<Number>
设置/获取 摄像机垂直角度范围[最小值, 最大值],默认值[-90, 90]
Type:
- Array.<Number>
Example
// 限制摄像机不看到场景地面以下app.camera.xAngleLimitRange = [0,90]
yAngleLimitRange :Array.<Number>
设置/获取 摄像机水平角度范围[最小值, 最大值] [-180, 180] 之间(在地球上该参数暂不生效)
Type:
- Array.<Number>
zoomLimited :Array.<Number>
设置/获取 摄像机缩放系数范围[最小值, 最大值] (仅在 2D 视图下有效果)
Type:
- Array.<Number>
Methods
distanceTo(position) → {Number}
获取摄像机到某坐标或者另一物体的绝对距离
Parameters:
Name Type Description position
Array.<number> | THING.BaseObject 世界坐标系下的位置 或 另一物体
Returns:
距离
- Type
- Number
Example
// 填写世界坐标系下的位置camera.distanceTo([0,0,0]);// 填写物体对象camera.distanceTo(otherObj);
fit(param)
观察某物体
Parameters:
Name Type Description param
Object 参数列表
Properties
Name Type Argument Description object
THING.BaseObject 观察的物体
xAngle
Number <optional> 绕物体自身 X 轴旋转角度
yAngle
Number <optional> 绕物体自身 Y 轴旋转角度
radiusFactor
Number <optional> 离目标物体距离(离物体 n 倍自身包围盒半径距离处)
radius
Number <optional> 离目标物体距离(与 radiusFactor 选填其一)
Example
// 观察某物体app.camera.fit(obj);// 距离3倍物体自身包围盒半径处观察物体app.camera.fit({ object:obj, radiusFactor:3})// 距离物体 3m 处观察app.camera.fit({ object:obj, radius:3})// 从顶部观察物体,距离物体3倍自身包围盒半径app.camera.fit({ object: obj, xAngle: 90, // 绕物体自身X轴旋转角度 yAngle: 0, // 绕物体自身Y轴旋转角度 radiusFactor: 3, // 物体包围盒半径的倍数});// 从顶部观察物体,距离物体 3m 处app.camera.fit({ object: obj, xAngle: 90, // 绕物体自身X轴旋转角度 yAngle: 0, // 绕物体自身Y轴旋转角度 radius: 3, // 物体包围盒半径的倍数});
flyTo(param)
摄像机飞行到某位置或物体
Parameters:
Name Type Description param
Object 参数列表
Properties
Name Type Argument Description object
THING.BaseObject 观察的物体
target
Array.<Number> 观察的目标点位置(与 object 参数选填其一)
position
Array.<Number> <optional> 摄像机镜头位置(与 target 组合使用)
up
Array.<Number> <optional> 摄像机up朝向
time
Number <optional> 飞行过程的时间(毫秒),默认值 2s
xAngle
Number <optional> 绕物体自身 X 轴旋转角度
yAngle
Number <optional> 绕物体自身 Y 轴旋转角度
radiusFactor
Number <optional> 离目标点距离(离目标点 n 倍物体自身包围盒半径距离处)
radius
Number <optional> 离目标点距离(与 radiusFactor 选填其一)
lerpType
THING.LerpType <optional> 飞行速度插值方式
positionLerp
THING.LerpType <optional> 摄像机镜头坐标插值方式
targetLerp
THING.LerpType <optional> 目标点插值方式
upLerp
THING.LerpType <optional> up朝向插值方式
isEarth
Boolean <optional> 是否在地球上 默认false 在地球上使用需要传true
complete
function <optional> 飞行结束时的回调函数
Example
// 飞行到某位置app.camera.flyTo({ position: [3.6, 4.8, -6.5], target: [-4.2, -3.2, -20.6], time: 2000, complete: function() { THING.Utils.log('complete') }});// 飞行到某物体app.camera.flyTo(obj)// 飞行到某物体 设置飞行时间 和 飞行结束后的回调app.camera.flyTo({ object: obj, time: 1500, complete: function() { THING.Utils.log('finish') }});// 飞行到某物体正前方 2倍物体自身包围半径距离处app.camera.flyTo({ object: obj, xAngle: 0, // 绕物体自身X轴旋转角度 yAngle: 0, // 绕物体自身Y轴旋转角度 radiusFactor: 2, // 物体包围盒半径的倍数 time: 2 * 1000, complete: function () { THING.Utils.log("飞行结束"); }});// 飞行到某物体正前方 5m 处app.camera.flyTo({ object: obj, xAngle: 0, // 绕物体自身X轴旋转角度 yAngle: 0, // 绕物体自身Y轴旋转角度 radius: 5, time: 2 * 1000, complete: function () { THING.Utils.log("飞行结束"); }});// 飞到物体顶部 3倍物体自身包围盒半径距离处app.camera.flyTo({ object: obj, xAngle: 90, // 绕物体自身X轴旋转角度 yAngle: 0, // 绕物体自身Y轴旋转角度 radiusFactor: 3, // 物体包围盒半径的倍数 time: 2 * 1000, complete: function () { THING.Utils.log("飞行结束"); }});
isInView(object) → {Boolean}
根据物体包围盒检测是某物体否在摄相机视锥范围内
Parameters:
Name Type Description object
THING.BaseObject 物体
Returns:
- Type
- Boolean
Example
app.camera.isInView(obj)
lookAt(target)
看向某个物体或位置(设置后鼠标无法旋转和平移)
Parameters:
Name Type Description target
Array.<Number> | THING.BaseObject 物体或者坐标,取消设置填 null
Example
// 看向某物体app.camera.lookAt(app.query('car01')[0]);// 看向某点app.camera.lookAt([20, 5.6, -6.6]);// 取消设置app.camera.lookAt(null);
move(deltaX, deltaY)
移动摄像机
Parameters:
Name Type Description deltaX
Number 水平移动距离
deltaY
Number 垂直移动距离
Example
// 水平移动 10 mapp.camera.move(10,0);// 垂直移动 10 mapp.camera.move(0,10);
rotateAround(params)
环绕旋转
Parameters:
Name Type Description params
Object 参数列表
Properties
Name Type Argument Description object
THING.BaseObject <optional> 环绕的物体
target
Array.<Number> <optional> 环绕的某点世界坐标系下的坐标(与 object 选填其一)
yRotateAngle
Number <optional> 环绕 Y 轴旋转角度(俯仰面(竖直面)内的角度,范围0~180度)
xRotateAngle
Number <optional> 环绕 X 轴旋转角度(方位面(水平面)内的角度,范围0~360度)
time
Number <optional> 处理时间(毫秒)
loopType
String <optional> 循环类型,默认为 no
complete
function <optional> 环绕旋转完成后的回调函数 仅当 loopType 为 no 时有回调
isEarth
Boolean <optional> 是否在地球上 默认false 在地球上使用需要传true
Example
// 环绕某物体旋转 360 度,10s 转完app.camera.rotateAround({ object: obj,// 环绕的物体 (object 与 target 的设置互斥 详见教程) time: 10 * 1000, // 环绕飞行的时间 yRotateAngle: 360, // 环绕y轴飞行的旋转角度 complete:function(){ THING.Utils.log('finish') }});// 环绕 [0,0,0] 点一直旋转app.camera.rotateAround({ target: [0,0,0], time: 60 * 1000, // 环绕飞行的时间 yRotateAngle: 360, // 环绕y轴飞行的旋转角度 loopType: THING.LoopType.Repeat // 设置循环类型 重复循环});
screenToWorld(x, y) → {Array.<Number>}
屏幕坐标转世界坐标
Parameters:
Name Type Description x
Number 屏幕x坐标
y
Number 屏幕y坐标
Returns:
三维世界坐标
- Type
- Array.<Number>
stopFlying( [params])
停止飞行
Parameters:
Name Type Argument Description params
Object <optional> 参数列表
Properties
Name Type Argument Description isEarth
Boolean <optional> 是否在地球上 默认false 在地球上使用需要传true
stopRotateAround( [params])
停止环绕旋转(针对 rotateAround)
Parameters:
Name Type Argument Description params
Object <optional> 参数列表
Properties
Name Type Argument Description isEarth
Boolean <optional> 是否在地球上 默认false 在地球上使用需要传true
worldToScreen(position) → {Array.<Number>}
世界坐标转换成屏幕坐标
Parameters:
Name Type Description position
Array.<Number> 三维世界坐标
Returns:
二维屏幕坐标
- Type
- Array.<Number>
zoom(distance, time)
向前/向后移动摄像机
Parameters:
Name Type Default Description distance
Number 移动距离(+: 向前, -: 向后)
time
Number 500 移动时间(毫秒)默认值为 0.5s