Skip to content

相机控件

OrbitControls

▶ 在线运行案例

相机控件

你将学到什么

  • OrbitControls 的基本用法与事件监听
  • 手动渲染模式 vs 动画循环渲染
  • 阻尼 enableDamping 的配置要点

效果说明

鼠标左键旋转、滚轮缩放、右键平移,围绕场景中心轨道式观察立方体。本案例在 change 事件里 按需渲染,而非持续 rAF。

核心概念

js
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';

const controls = new OrbitControls(camera, renderer.domElement);
操作默认按键
旋转左键拖拽
缩放滚轮
平移右键拖拽

两种渲染策略

1. 按需渲染(本案例)

js
controls.addEventListener('change', () => {
    renderer.render(scene, camera);
});
// 静止时不消耗 GPU

2. 动画循环(推荐配合阻尼)

js
controls.enableDamping = true;
function animate() {
    requestAnimationFrame(animate);
    controls.update();  // 阻尼必须每帧 update
    renderer.render(scene, camera);
}

实现步骤

  1. 创建受光场景(Lambert + DirectionalLight + Helper)
  2. 初始化 OrbitControls
  3. 监听 changerender

代码要点

js
const controls = new OrbitControls(camera, renderer.domElement);

controls.addEventListener('change', () => {
    renderer.render(scene, camera);
});

目标点

默认围绕 (0,0,0) 旋转。可通过 controls.target.set(x,y,z) 改变观察中心。

源码

完整源码见 在线案例

js
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'

// ... scene, mesh, light, camera, renderer ...

const controls = new OrbitControls(camera, renderer.domElement);
controls.addEventListener('change', () => renderer.render(scene, camera));
renderer.render(scene, camera);

小结

入门案例 · Three.js · 12/15