OrbitControls - Verge3D 用户手册 - Soft8Soft
Description: 了解如何在使用 Verge3D 制作的交互式 3D 应用程序中使用 OrbitControls

# OrbitControls

Orbit controls（轨道控制器）可以使得相机围绕目标进行轨道运动。

## 示例

`var renderer = new v3d.WebGLRenderer(); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); var scene = new v3d.Scene(); var camera = new v3d.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 10000); var controls = new v3d.OrbitControls(camera); //controls.update() must be called after any manual changes to the camera's transform camera.position.set(0, 20, 100); controls.update(); function animate() { requestAnimationFrame(animate); // required if controls.enableDamping or controls.autoRotate are set to true controls.update(); renderer.render(scene, camera); }`

## 构造函数

### OrbitControls(object, domElement)

object: (必须) 将要被控制的相机。
domElement: (可选) 用于事件监听的HTML元素。 默认是整个文档，但是，如果只希望控件在特定元素（例如画布）上工作，则可以在此处指定。

## 属性

### # .autoRotate : Boolean

将其设为true，以自动围绕目标旋转。
请注意，如果它被启用，你必须在你的动画循环里调用.update()。

### # .autoRotateSpeed : Float

当# .autoRotate : Boolean为true时，围绕目标旋转的速度将有多快，默认值为2.0，相当于在60fps时每旋转一周需要30秒
请注意，如果# .autoRotate : Boolean被启用，你必须在你的动画循环里调用.update()。

### # .dampingFactor : Float

当# .enableDamping : Boolean设置为true的时候，阻尼惯性有多大。
请注意，如果它被启用，你必须在你的动画循环里调用.update()。

### # .domElement : HTMLDOMElement

该 HTMLDOMElement 用于监听鼠标/触摸事件，该属性必须在构造函数中传入。在此处改变它将不会设置新的事件监听。

### # .enabled : Boolean

是否开启控制器。

### # .enableDamping : Boolean

将其设置为true以启用阻尼（惯性），这将给控制器带来重量感。默认值为false。
请注意，如果它被启用，你必须在你的动画循环里调用.update()。

### # .enableKeys : Boolean

开启或关闭使用键盘控制。

### # .enablePan : Boolean

启用或禁用摄影机平移，默认为true。

### # .enableRotate : Boolean

启用或禁用摄影机水平或垂直旋转。默认值为true。
请注意，可以通过将polar angle 或 azimuth angle的min和max设置为相同的值来禁用单个轴， 这将使得水平旋转或垂直旋转固定为所设置的值。

### # .enableZoom : Boolean

启用或禁用摄影机的缩放。

### # .keyPanSpeed : Float

当使用键盘按键的时候，相机平移的速度有多快。默认值为每次按下按键时平移7像素。

### # .keys : Object

这一对象包含了用于控制相机平移的按键代码的引用。默认值为4个箭头（方向）键。 `controls.keys = { LEFT: 37, //left arrow UP: 38, // up arrow RIGHT: 39, // right arrow BOTTOM: 40 // down arrow }` 请参阅this page来查看所有按键的代码列表。

### # .maxAzimuthAngle : Float

你能够水平旋转的角度上限。如果设置，其有效值范围为[-2 * Math.PI，2 * Math.PI]，且旋转角度的上限和下限差值小于2 * Math.PI。默认值为无穷大。

### # .maxDistance : Float

你能够将相机向外移动多少（仅适用于PerspectiveCamera），其默认值为Infinity。

### # .maxPolarAngle : Float

你能够垂直旋转的角度的上限，范围是0到Math.PI，其默认值为Math.PI。

### # .maxZoom : Float

你能够将相机缩小多少（仅适用于OrthographicCamera），其默认值为Infinity。

### # .minAzimuthAngle : Float

你能够水平旋转的角度下限。如果设置，其有效值范围为[-2 * Math.PI，2 * Math.PI]，且旋转角度的上限和下限差值小于2 * Math.PI。默认值为无穷大。

### # .minDistance : Float

你能够将相机向内移动多少（仅适用于PerspectiveCamera），其默认值为0。

### # .minPolarAngle : Float

你能够垂直旋转的角度的下限，范围是0到Math.PI，其默认值为0。

### # .minZoom : Float

你能够将相机放大多少（仅适用于OrthographicCamera），其默认值为0。

### # .mouseButtons : Object

该对象包含由控件所使用的鼠标操作的引用。 `controls.mouseButtons = { ROTATE: v3d.MOUSE.LEFT, ZOOM: v3d.MOUSE.MIDDLE, PAN: v3d.MOUSE.RIGHT }`

### # .object : Camera

正被控制的摄影机（或其它物体）。

### # .position0 : Vector3

由.saveState 和 .reset 方法在内部使用。

### # .rotateSpeed : Float

旋转的速度，其默认值为1。

### # .screenSpacePanning : Boolean

定义当平移的时候摄影机的位置将如何移动。如果为true，摄影机将在屏幕空间内平移。 否则，摄影机将在与摄影机向上方向垂直的平面中平移。当使用 OrbitControls 时， 默认值为true；当使用 MapControls 时，默认值为false。

### # .target0 : Vector3

由.saveState 和 .reset 方法在内部使用。

### # .targetObj : Object3D

控制器的焦点，.object的轨道围绕它运行。 它可以在任何时候被手动更新，以更改控制器的焦点。

### # .zoom0 : Float

由.saveState 和 .reset 方法在内部使用。

### # .zoomSpeed : Float

摄影机缩放的速度，其默认值为1。

## 方法

### # .dispose() → null

移除所有的事件监听。

### # .getAzimuthalAngle() → radians

获得当前的水平旋转，单位为弧度。

### # .getPolarAngle() → radians

获得当前的垂直旋转，单位为弧度。

### # .reset() → null

将控制器重置为上次调用.saveState时的状态，或者初始状态。

### # .saveState() → null

保存当前控制器的状态。这一状态可在之后由.reset所恢复。

### # .tween(toPosition : Vector3, toTarget : Vector3, time : Number, finishCb : Function, movementType : Number) → null

toPosition -- 相机的新位置。
toTarget -- 新的目标点。
time -- 补间动画的时间长度。
finishCb -- 补间动画结束的回调函数。
movementType -- 运动的插值类型。可以是 v3d.TweenLinear (默认) 或 v3d.TweenSpherical.
在指定的时间内平滑地将摄影机的当前位置和目标点更改为指定的新位置和目标。

### # .update() → false

更新控制器。必须在摄影机的变换发生任何手动改变后调用， 或如果.autoRotate 或 .enableDamping被设置时，在update循环里调用。

## 源代码

关于如何获取此模块的源代码，请查看 本页。