尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Three.js 相机控件教程

Three.js 相机控件教程
📅 发布时间:2026/7/3 17:14:05

相机控件 ·OrbitControls· ▶ 在线运行案例

  • 案例合集:三维可视化功能案例(threehub.cn)
  • 开源仓库github地址:https://github.com/z2586300277/three-cesium-examples
  • 400个案例代码:网盘链接

你将学到什么

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

效果说明

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

核心概念

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

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

| 操作 | 默认按键 | |------|---------| | 旋转 | 左键拖拽 | | 缩放 | 滚轮 | | 平移 | 右键拖拽 |

两种渲染策略

1. 按需渲染(本案例)
controls.addEventListener('change', () => {

renderer.render(scene, camera); }); // 静止时不消耗 GPU

2. 动画循环(推荐配合阻尼)
controls.enableDamping = true;

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

实现步骤

  • 创建受光场景(Lambert + DirectionalLight + Helper)
  • 初始化 OrbitControls
  • 监听change→render
  • 代码要点

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

    // 场景 const scene = new THREE.Scene();// 创建场景 const geometry = new THREE.BoxGeometry(10, 60, 100); //几何体 const material = new THREE.MeshLambertMaterial(); //材质 const mesh = new THREE.Mesh(geometry, material); //网格模型 mesh.position.set(0, 10, 0); //网格模型位置 scene.add(mesh); //场景添加网格模型

    // AxesHelper const axesHelper = new THREE.AxesHelper(150); scene.add(axesHelper);

    // 光源 const pointLight = new THREE.DirectionalLight(0xff00ff, 1.0); //颜色、强度 pointLight.position.set(200, 300, 400); //位置 scene.add(pointLight); //点光源添加到场景中

    // 光源参考线 const dirLightHelper = new THREE.DirectionalLightHelper(pointLight, 5, 0xff0000); scene.add(dirLightHelper);

    // 相机 const camera = new THREE.PerspectiveCamera(); //相机 camera.position.set(200, 200, 200); //相机位置 camera.lookAt(0, 10, 0); //相机观察位置

    // 渲染器 const renderer = new THREE.WebGLRenderer(); // 创建渲染器 const box = document.getElementById('box'); renderer.setSize(box.clientWidth, box.clientHeight); //渲染区域 renderer.render(scene, camera); //执行渲染 box.appendChild(renderer.domElement);

    // 设置相机控件轨道控制器OrbitControls const controls = new OrbitControls(camera, renderer.domElement); // 如果OrbitControls改变了相机参数,重新调用渲染器渲染三维场景 controls.addEventListener('change', function () { renderer.render(scene, camera); //执行渲染操作 console.log(camera.position) });//监听鼠标、键盘事件

    完整源码:GitHub

    小结

    • 本文提供相机控件完整 Three.js 源码与在线 Demo,建议先运行案例再改 uniform/参数做二次实验
    • 更多 Three.js 实战案例见 three-cesium-examples 合集 与 GitHub 开源仓库

相关新闻

  • 【安全工具】Web漏洞扫描十大工具(非常详细),零基础入门到精通,看这一篇就够了
  • # Java Web开发入门指南:IDEA+Tomcat环境搭建与项目部署
  • 【小白也能轻松玩转龙虾】虾壳云一键部署单机模式,不依靠服务器部署 OpenClaw v2.7.9(附最新安装包)

最新新闻

  • Akagi麻将AI助手:5分钟快速上手指南,让你的麻将水平突飞猛进!
  • 2026港澳通行证证件照软件指南:APP制作教程与工具推荐
  • 【小白也能轻松玩转龙虾】虾壳云一键部署全程图文对照,新手跟着操作零难度(附最新安装包)
  • AI范式迁移:神经符号融合与具身智能的工程落地
  • 云顶之弈终极助手:TFT Overlay 3分钟快速上手免费策略工具指南
  • 汽车总线测试革命:5个核心功能让TSMaster成为工程师的秘密武器

日新闻

  • JMeter接口测试实战:从核心元件到复杂场景构建
  • Java Applet版刽子手游戏源码:含完整项目结构、吊杆绘图与胜负逻辑
  • 使用Apache JMeter对RoadRunner PHP应用进行性能测试与调优指南

周新闻

  • Windows字体自定义终极方案:No!! MeiryoUI完全指南
  • Deepin Boot Maker:告别命令行,3分钟制作Linux启动盘的智能解决方案
  • Plain Craft Launcher 2:重新定义你的Minecraft游戏体验

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号