Generic controls for orbiting a target in 3D. Can be used to control a camera, a 3D ray, or anything with { position, direction }.
Features:
Roadmap:
Can be used with any camera abstraction that uses position and direction to form the view matrix, including ThreeJS, Babylon, stackgl, etc.
Well-suited alongside perspective-camera.
Note: This module is still in development.
var controls = require('orbit-controls')()
function tick () {
controls.update()
controls.copyInto(camera.position, camera.direction, camera.up)
}
controls = createControls([opts])position the initial position of the camera, default [0, 0, 1]up the initial direction of the camera, default [0, 1, 0]target the center of the orbit, default [0, 0, 0]phi the initial rotation in radians, phi in spherical coordinates, default Math.PI/2theta the initial rotation in radians, theta in spherical coordinates, default 0distance the distance from the target, default 1damping how fast the controls slow down, between 0 and 1, default 0.25rotateSpeed the speed of the rotation, default 0.28zoomSpeed the speed of the zoom, default 0.0075pinchSpeed (coming soon) the speed of the pinch, default 0.0075pinch (coming soon) enable pinching, default truezoom enable zooming, default truerotate enable rotating, default truephiBounds the bounds of the phi rotation, default [0, Math.PI]thetaBounds the bounds of the theta rotation, default [-Infinity, Infinity]distanceBounds the bounds of the distance, default [0, Infinity]parent the parent element, default windowelement the element, default windowcontrols.update()Update the internal position, direction, and up vectors that represent the camera.
controls.copyInto(position, direction, up)Apply the control's current state to a target camera.
This is purely for convenience; you can also copy the controls.position and other members manually.
controls.enable()Enables the DOM events and input, attaching new mouse and touch events. If already enabled, this function does nothing.
controls.disable()Disables the DOM events and input, detaching all events. If already disabled, this function does nothing.
position, direction, upVector arrays [x, y, z] that represent the camera controls. These are typically copied into your camera interface with:
```js var camera = new MyPerspectiveCamera() controls.copyInto(camera.position, camera.direction, camera.up) ````
targetThe vec3 center of the orbit
phi, thetaThe initial rotation in radians, in spherical coordinates. Changing either will re-calculate the direction.
distanceThe distance from the target, default 1
dampingHow fast the controls slow down, between 0 and 1, default 0.25
rotateSpeed, zoomSpeed, pinchSpeedThe speed of the controls.
pinch, zoom, rotateEnable pinch, zoom, and rotate
phiBounds, thetaBounds, distanceBoundsThe bounds of the controls
dragging (read-only)Returns true if the user is currently dragging the controls.
pinching (read-only)Returns true if the user is currently pinching (zooming on mobile) the controls.
MIT, see LICENSE.md for details.
$ claude mcp add orbit-controls \
-- python -m otcore.mcp_server <graph>