Three.js 拖拽控制教程 拖拽控制 ·Transform Controls· ▶ 在线运行案例案例合集三维可视化功能案例threehub.cn开源仓库github地址https://github.com/z2586300277/three-cesium-examples400个案例代码:网盘链接你将学到什么TransformControls三种模式 translate / rotate / scaleattach(object)绑定要操控的 Object3D拖拽时禁用 OrbitControls避免冲突效果说明GUI 可切换模式并将控制器attach到 Fox 模型、平行光或地面平面拖拽 gizmo 实时变换对象。核心概念const transformControls new TransformControls(camera, renderer.domElement);scene.add(transformControls.getHelper());transformControls.addEventListener(dragging-changed, event { controls.enabled !event.value; // 拖拽中关掉轨道控制 });folder.add(transformControls, mode, [translate, rotate, scale]); transformControls.attach(model);| 模式 | 快捷键默认 | 作用 | |------|---------------|------| | translate | W | 平移 | | rotate | E | 旋转 | | scale | R | 缩放 |代码要点import * as THREE from threeimport { OrbitControls } from three/examples/jsm/controls/OrbitControls.js import { GLTFLoader } from three/addons/loaders/GLTFLoader.js import { TransformControls } from three/examples/jsm/controls/TransformControls.js import { GUI } from three/addons/libs/lil-gui.module.min.js;const box document.getElementById(box)const scene new THREE.Scene()const camera new THREE.PerspectiveCamera(50, box.clientWidth / box.clientHeight, 0.1, 1000)camera.position.set(0, 3, 6)const renderer new THREE.WebGLRenderer({ antialias: true, alpha: true, logarithmicDepthBuffer: true })renderer.setSize(box.clientWidth, box.clientHeight)renderer.shadowMap.needsUpdate truerenderer.shadowMap.enabled truebox.appendChild(renderer.domElement)const controls new OrbitControls(camera, renderer.domElement)controls.enableDamping trueconst folder new GUI()// 变换控制器 const transformControls new TransformControls(camera, renderer.domElement)// 模式 translate | rotate | scale folder.add(transformControls, mode, [translate, rotate, scale]).name(模式)const transformControlsRoot transformControls.getHelper()scene.add(transformControlsRoot)transformControls.addEventListener(dragging-changed, event {controls.enabled !event.value})window.onresize () {renderer.setSize(box.clientWidth, box.clientHeight)camera.aspect box.clientWidth / box.clientHeightcamera.updateProjectionMatrix()}new GLTFLoader().load(GLOBAL_CONFIG.getFileUrl(files/model/Fox.glb), (gltf) {const model gltf.scenemodel.scale.set(0.01, 0.01, 0.01)model.traverse((child) {if (child.isMesh) child.castShadow true})scene.add(model)folder.add({ 控制模型: () transformControls.attach(model) }, 控制模型)})const pointLight new THREE.DirectionalLight(0xffffff, 1)pointLight.position.set(1, 2, 0)pointLight.castShadow truescene.add(pointLight)folder.add({ 控制光源: () transformControls.attach(pointLight) }, 控制光源)const plane new THREE.Mesh(new THREE.PlaneGeometry(100, 100), new THREE.MeshStandardMaterial({ color: 0xffffff }))plane.position.y - 0.5plane.rotation.x -Math.PI / 2plane.receiveShadow truescene.add(plane)folder.add({ 控制平面: () transformControls.attach(plane) }, 控制平面)animate()function animate() {requestAnimationFrame(animate)controls.update()renderer.render(scene, camera)}完整源码GitHub小结本文提供拖拽控制完整 Three.js 源码与在线 Demo建议先运行案例再改 uniform/参数做二次实验更多 Three.js 实战案例见 three-cesium-examples 合集 与 GitHub 开源仓库

相关新闻

最新新闻

基于HyperMesh的汽车内外饰件快速建模工作流解析

基于HyperMesh的汽车内外饰件快速建模工作流解析

很多做汽车内外饰件分析的工程师,第一次接触仪表板、门护板、副仪表板这类零件时,都会被同一个问题卡住:零件本身不大,但圆角、卡扣、加强筋、工艺孔、弱化线这些几何特征极其密集,翻遍HyperMesh 的 Geom 面板忙活半天…

2026/8/27 0:02:20
MATLAB多选题数据分析:稀疏矩阵实战指南

MATLAB多选题数据分析:稀疏矩阵实战指南

1. 这不是MATLAB语法课,而是一场多选题数据的实战解剖 你手头有一份问卷,327份有效回收,每道多选题允许勾选1–5个选项,原始数据在Excel里是“选项A,选项C,选项E”这样的字符串;你试过用Excel的文本分列COUNTIF&#x…

2026/8/27 0:02:20
CRC校验实战:从模2除法到HJ212协议排错

CRC校验实战:从模2除法到HJ212协议排错

1. 为什么一个“校验码”能扛住工业现场90%的数据 corruption? 你有没有遇到过这样的场景:嵌入式设备通过RS-485上传温湿度数据,上位机偶尔收到一帧乱码——温度显示成-273℃,湿度跳到999%,但串口波形看起来完全正常&a…

2026/8/27 0:02:20
LeetCode Hot100(51-60)算法精解与面试技巧

LeetCode Hot100(51-60)算法精解与面试技巧

1. 题目背景与核心价值"hot100(51-60)"这个标题看起来像是某个编程题库或算法练习集中的一组题目编号。在技术社区中,类似命名通常指向LeetCode、牛客网等平台的热门题目集合。作为刷过300题的算法老手,我理解这类题目的核心价值在于&#xff…

2026/8/27 0:02:20
Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

1. 项目概述:从零构建一个企业级的AI服务网关 最近在帮一个做内容审核的团队做技术架构升级,他们原来的业务里,每天有几十万张图片和短视频需要过审,最初是接了几个开源的AI模型自己部署,但效果和性能一直不太稳定。后…

2026/8/27 0:02:20
微信小程序设计规范实战指南:从视觉交互到性能优化的全链路解析

微信小程序设计规范实战指南:从视觉交互到性能优化的全链路解析

1. 从“能用”到“好用”:为什么需要设计规范?如果你做过几个微信小程序项目,可能会发现一个现象:有些小程序用起来特别顺手,界面清晰,操作流畅,感觉和微信本身融为一体;而有些小程序…

2026/8/26 23:57:20