OrbitControls

OrbitControls

3D虚拟工厂在线体验

描述

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

Constructor

OrbitControls( object : Camera, domElement : HTMLDOMElement )

参数 类型 描述
object Camera (必须)将要被控制的相机。该相机不允许是其他任何对象的子级,除非该对象是场景自身。
domElement HTMLDOMElement 用于事件监听的HTML元素。

Events

事件名 描述
change 当摄像机被组件改变时触发。
start 初始化交互时触发。
end 当交互结束时触发。

属性

属性 类型 默认值 描述
.autoRotate Boolean false 设为true以自动围绕目标旋转。需在动画循环中调用.update()
.autoRotateSpeed Float 2.0 自动旋转的速度(60fps时每30秒转一圈)。需调用.update()
.dampingFactor Float 0.05 启用阻尼时的惯性大小。需调用.update()
.domElement HTMLDOMElement - 用于监听事件的元素(必须在构造函数中传入)。
.enabled Boolean true 是否响应操作。
.enableDamping Boolean false 启用阻尼(惯性)效果。需调用.update()
.enablePan Boolean true 是否启用平移。
.enableRotate Boolean true 是否启用旋转。
.enableZoom Boolean true 是否启用缩放。
.keyPanSpeed Float 7 键盘平移速度(像素/按键)。
.keys Object 方向键 控制平移的按键代码(默认使用四个方向键)。
.maxAzimuthAngle Float Infinity 水平旋转角度上限(弧度)。
.maxDistance Float Infinity 相机外移距离上限(仅PerspectiveCamera)。
.maxPolarAngle Float Math.PI 垂直旋转角度上限(0到π)。
.maxZoom Float Infinity 相机缩小上限(仅OrthographicCamera)。
.minAzimuthAngle Float -Infinity 水平旋转角度下限(弧度)。
.minDistance Float 0 相机内移距离下限(仅PerspectiveCamera)。
.minPolarAngle Float 0 垂直旋转角度下限(0到π)。
.minZoom Float 0 相机放大下限(仅OrthographicCamera)。
.mouseButtons Object LEFT:旋转 MIDDLE:缩放 RIGHT:平移 鼠标按键功能映射。
.object Camera - 被控制的相机。
.panSpeed Float 1 平移速度。
.position0 Vector3 - 内部状态存储(用于.reset())。
.rotateSpeed Float 1 旋转速度。
.screenSpacePanning Boolean true 是否在屏幕空间内平移。
.target0 Vector3 - 内部状态存储(用于.reset())。
.target Vector3 - 相机轨道围绕的目标点。
.touches Object ONE:旋转 TWO:缩放平移 触摸操作功能映射。
.zoom0 Float - 内部状态存储(用于.reset())。
.zoomSpeed Float 1 缩放速度。
.zoomToCursor Boolean false 是否缩放到光标位置。

方法

方法 参数 返回值 描述
.dispose() - undefined 移除所有事件监听。
.getAzimuthalAngle() - radians 获取当前水平旋转弧度。
.getPolarAngle() - radians 获取当前垂直旋转弧度。
.getDistance() - Float 获取相机到目标的距离。
.listenToKeyEvents(domElement) domElement: HTMLDOMElement undefined 为指定元素添加按键监听(推荐window)。
.reset() - undefined 重置到上次保存的状态或初始状态。
.saveState() - undefined 保存当前控制器状态。
.stopListenToKeyEvents() - undefined 移除按键监听。
.update(deltaTime) deltaTime: Number(可选) Boolean 更新控制器。手动改变相机变换后必须调用;若启用自动旋转.autoRotate或阻尼.enableDamping,则需在更新循环中调用。可选参数deltaTime(秒)用于使自动旋转速度不受帧率影响。

例子

typescript 复制代码
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
const renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 10000 );
const controls = new OrbitControls( camera, renderer.domElement );
//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 );
}
相关推荐
熊猫钓鱼>_>3 天前
2026 前端的三场底层革命:当 Vue、React Native 和 Three.js 同时去掉中间层
前端·javascript·vue.js·react native·架构·webgl·three.js
xyccstudio3 天前
Three.js 实战 —— 从零构建 3D 原子模型
three.js
柳杉5 天前
别再手写大屏了!用这套「3D 地图 + 拖拽脚手架」示例源码,交付效率提升 80%
前端·three.js·数据可视化
郝学胜-神的一滴5 天前
[简化版 GAMES 101] 计算机图形学 16:纹理走样、Mipmap、三线性插值、各向异性过滤原理全解
unity·游戏引擎·godot·图形渲染·three.js·opengl·unreal
柳杉10 天前
可视化大屏设计器脚手架:从设计到交付的一站式方案
前端·three.js·数据可视化
jump_jump11 天前
网页 UI 终于能进游戏和 3D 场景了:HTML-in-Canvas 为什么重要
浏览器·three.js·canvas
牧艺17 天前
用 Next.js + React Three Fiber 打造 3D 快递仓储可视化
前端·three.js
Yuhua_Cesium_Threejs19 天前
《在 Cesium 中用 Three.js 实现气象雷达三维体渲染——从原理到性能优化》
three.js
牧艺19 天前
用 Three.js 实现一个浏览器端 3D 看车的项目
前端·three.js
凌涘24 天前
从零掌握 CSS 3D:用几行代码让网页"立"起来
three.js