当前位置: 首页 > 文档资料 > ThingJS 文档中心 >

Class: CameraController

优质
小牛编辑
121浏览
2023-12-01

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:
NameTypeDescription
positionArray.<number> | THING.BaseObject

世界坐标系下的位置 或 另一物体

Returns:

距离

Type
Number
Example
// 填写世界坐标系下的位置camera.distanceTo([0,0,0]);// 填写物体对象camera.distanceTo(otherObj);

fit(param)

观察某物体

Parameters:
NameTypeDescription
paramObject

参数列表

Properties
NameTypeArgumentDescription
objectTHING.BaseObject

观察的物体

xAngleNumber<optional>

绕物体自身 X 轴旋转角度

yAngleNumber<optional>

绕物体自身 Y 轴旋转角度

radiusFactorNumber<optional>

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

radiusNumber<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:
NameTypeDescription
paramObject

参数列表

Properties
NameTypeArgumentDescription
objectTHING.BaseObject

观察的物体

targetArray.<Number>

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

positionArray.<Number><optional>

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

upArray.<Number><optional>

摄像机up朝向

timeNumber<optional>

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

xAngleNumber<optional>

绕物体自身 X 轴旋转角度

yAngleNumber<optional>

绕物体自身 Y 轴旋转角度

radiusFactorNumber<optional>

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

radiusNumber<optional>

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

lerpTypeTHING.LerpType<optional>

飞行速度插值方式

positionLerpTHING.LerpType<optional>

摄像机镜头坐标插值方式

targetLerpTHING.LerpType<optional>

目标点插值方式

upLerpTHING.LerpType<optional>

up朝向插值方式

isEarthBoolean<optional>

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

completefunction<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:
NameTypeDescription
objectTHING.BaseObject

物体

Returns:
Type
Boolean
Example
app.camera.isInView(obj)

lookAt(target)

看向某个物体或位置(设置后鼠标无法旋转和平移)

Parameters:
NameTypeDescription
targetArray.<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:
NameTypeDescription
deltaXNumber

水平移动距离

deltaYNumber

垂直移动距离

Example
// 水平移动 10 mapp.camera.move(10,0);// 垂直移动 10 mapp.camera.move(0,10);

rotateAround(params)

环绕旋转

Parameters:
NameTypeDescription
paramsObject

参数列表

Properties
NameTypeArgumentDescription
objectTHING.BaseObject<optional>

环绕的物体

targetArray.<Number><optional>

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

yRotateAngleNumber<optional>

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

xRotateAngleNumber<optional>

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

timeNumber<optional>

处理时间(毫秒)

loopTypeString<optional>

循环类型,默认为 no

completefunction<optional>

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

isEarthBoolean<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:
NameTypeDescription
xNumber

屏幕x坐标

yNumber

屏幕y坐标

Returns:

三维世界坐标

Type
Array.<Number>

stopFlying( [params])

停止飞行

Parameters:
NameTypeArgumentDescription
paramsObject<optional>

参数列表

Properties
NameTypeArgumentDescription
isEarthBoolean<optional>

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


stopRotateAround( [params])

停止环绕旋转(针对 rotateAround)

Parameters:
NameTypeArgumentDescription
paramsObject<optional>

参数列表

Properties
NameTypeArgumentDescription
isEarthBoolean<optional>

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


worldToScreen(position) → {Array.<Number>}

世界坐标转换成屏幕坐标

Parameters:
NameTypeDescription
positionArray.<Number>

三维世界坐标

Returns:

二维屏幕坐标

Type
Array.<Number>

zoom(distance, time)

向前/向后移动摄像机

Parameters:
NameTypeDefaultDescription
distanceNumber

移动距离(+: 向前, -: 向后)

timeNumber500

移动时间(毫秒)默认值为 0.5s