在线咨询
QQ交流群
微信公众号

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 :String

设置/获取 摄像机投影类型 默认为透视投影

Type:
  • String
Example
// 透视投影
app.camera.projectionType = THING.CameraProjectionType.Perspective;
// 正射投影
app.camera.projectionType = THING.CameraProjectionType.Orthographic;

target :Array.<number>

设置/获取摄像机 目标点位置

Type:
  • Array.<number>
Example
app.camera.target = [0,0,0]

up :Array.<number>

设置/获取 摄像机 UP 方向 默认值为 [0,1,0]

Type:
  • Array.<number>

viewMode :Number

设置/获取 视图默认(2D/3D视图) 默认为 3D 视图

Type:
  • Number
Example
// 设置为 2D 顶视图
app.camera.viewMode = THING.CameraView.TopView;
// 设置为 3D 视图
app.camera.viewMode = THING.CameraView.Normal;

xAngleLimitRange :Array.<Number>

设置/获取 摄像机垂直角度范围[最小值, 最大值],默认值[0, 180]

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 Description
object THING.BaseObject

观察的物体

xAngle? Number

绕物体自身 X 轴旋转角度

yAngle? Number

绕物体自身 Y 轴旋转角度

radiusFactor? Number

离目标物体距离(离物体 n 倍自身包围盒半径距离处)

radius? Number

离目标物体距离(与 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, isEarth?)

摄像机飞行到某位置或物体

Parameters:
Name Type Description
param Object

参数列表

Properties
Name Type Description
object THING.BaseObject

观察的物体

target Array.<Number>

观察的目标点位置(与 object 参数选填其一)

position? Array.<Number>

摄像机镜头位置(与 target 组合使用)

up? Array.<Number>

摄像机up朝向

time? Number

飞行过程的时间(毫秒),默认值 2s

xAngle? Number

绕物体自身 X 轴旋转角度

yAngle? Number

绕物体自身 Y 轴旋转角度

radiusFactor? Number

离目标点距离(离目标点 n 倍物体自身包围盒半径距离处)

radius? Number

离目标点距离(与 radiusFactor 选填其一)

lerpType? THING.LerpType

飞行速度插值方式

positionLerp? THING.LerpType

摄像机镜头坐标插值方式

targetLerp? THING.LerpType

目标点插值方式

upLerp? THING.LerpType

up朝向插值方式

isEarth? Boolean

是否在地球上 默认false 在地球上使用需要传true

param.complete? function

飞行结束时的回调函数

Example
// 飞行到某位置
app.camera.flyTo({
  position: [3.6, 4.8, -6.5],
  target: [-4.2, -3.2, -20.6],
  time: 2000,
  complete: function() {
    console.log('complete')
  }
});
// 飞行到某物体
app.camera.flyTo(obj)
// 飞行到某物体 设置飞行时间 和 飞行结束后的回调
app.camera.flyTo({
  object: obj,
  time: 1500,
  complete: function() {
    console.log('finish')
  }
});
// 飞行到某物体正前方 2倍物体自身包围半径距离处
app.camera.flyTo({
  object: obj,
  xAngle: 0, // 绕物体自身X轴旋转角度
  yAngle: 0, // 绕物体自身Y轴旋转角度
  radiusFactor: 2, // 物体包围盒半径的倍数
  time: 2 * 1000,
  complete: function () {
    console.log("飞行结束");
  }
});

// 飞行到某物体正前方 5m 处
app.camera.flyTo({
  object: obj,
  xAngle: 0, // 绕物体自身X轴旋转角度
  yAngle: 0, // 绕物体自身Y轴旋转角度
  radius: 5,
  time: 2 * 1000,
  complete: function () {
    console.log("飞行结束");
  }
});
// 飞到物体顶部 3倍物体自身包围盒半径距离处
app.camera.flyTo({
  object: obj,
  xAngle: 90, // 绕物体自身X轴旋转角度
  yAngle: 0, // 绕物体自身Y轴旋转角度
  radiusFactor: 3, // 物体包围盒半径的倍数
  time: 2 * 1000,
  complete: function () {
    console.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 | 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 m
app.camera.move(10,0);
// 垂直移动 10 m
app.camera.move(0,10);

rotateAround(params, isEarth?)

环绕旋转

Parameters:
Name Type Description
params Object

参数列表

Properties
Name Type Description
object? THING.BaseObject

环绕的物体

target? Array.<Number>

环绕的某点世界坐标系下的坐标(与 object 选填其一)

yRotateAngle? Number

环绕 Y 轴旋转角度(俯仰面(竖直面)内的角度,范围0~180度)

xRotateAngle? Number

环绕 X 轴旋转角度(方位面(水平面)内的角度,范围0~360度)

time? Number

处理时间(毫秒)

loopType? String

循环类型,默认为 no

complete? function

环绕旋转完成后的回调函数 仅当 loopType 为 no 时有回调

isEarth? Boolean

是否在地球上 默认false 在地球上使用需要传true

Example
// 环绕某物体旋转 360 度,10s 转完
app.camera.rotateAround({
  object: obj,// 环绕的物体 (object 与 target 的设置互斥 详见教程)
  time: 10 * 1000, // 环绕飞行的时间
  yRotateAngle: 360, // 环绕y轴飞行的旋转角度
  complete:function(){
    console.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?, isEarth?)

停止飞行

Parameters:
Name Type Description
params? Object

参数列表

isEarth? Boolean

是否在地球上 默认false 在地球上使用需要传true


stopRotateAround(params?, isEarth?)

停止环绕旋转(针对 rotateAround)

Parameters:
Name Type Description
params? Object

参数列表

isEarth? Boolean

是否在地球上 默认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