原创 curdcv_po 2025-06-25 08:30 重庆
效果智慧城「智慧孪生类」:智慧城市、智慧小区、智慧厂「大屏可视化」:地球飞线「物品」:配件3D、车、单个人「其
threejs
?// 添加坐标轴辅助器(长度为5)const axesHelper = new THREE.AxesHelper(5);scene.add(axesHelper);
02. 设置物体移动// 修改物体位置cube.position.set(3, 0, 0); // 一次性设置cube.position.x = 3; // 单独设置x轴// 动画移动function render() { cube.position.x += 0.01; if (cube.position.x > 5) cube.position.x = 0; renderer.render(scene, camera); requestAnimationFrame(render);}
03. 物体的缩放与旋转// 缩放cube.scale.set(3, 2, 1); // 各轴缩放比例cube.scale.x = 5; // 单独设置x轴// 旋转(弧度制)cube.rotation.set(Math.PI / 4, 0, 0, "XZY"); // 绕x轴旋转45度
04. 应用requestAnimationFramefunction render() { cube.rotation.x += 0.01; renderer.render(scene, camera); requestAnimationFrame(render); // 循环调用}render();
05. 通过Clock跟踪时间处理动画const clock = new THREE.Clock();function render() { const elapsedTime = clock.getElapsedTime(); // 获取运行总时长 cube.position.x = elapsedTime % 5; // 每5秒循环一次 renderer.render(scene, camera); requestAnimationFrame(render);}
06. Gsap动画库基本使用import gsap from"gsap";// 移动动画gsap.to(cube.position, {x: 5,duration: 5,repeat: -1, // 无限循环yoyo: true // 往返运动});// 旋转动画gsap.to(cube.rotation, { x: 2 * Math.PI, duration: 5});
07. Gsap控制动画属性与方法const animation = gsap.to(cube.position, { x: 5, duration: 5});// 暂停/恢复动画window.addEventListener("dblclick", () => {if (animation.isActive()) { animation.pause(); } else { animation.resume(); }});
08. 根据尺寸变化实现自适应window.addEventListener("resize", () => { // 更新相机比例 camera.aspect = window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); // 更新渲染器 renderer.setSize(window.innerWidth, window.innerHeight); renderer.setPixelRatio(window.devicePixelRatio);});
09. 控制画布全屏和退出window.addEventListener("dblclick", () => { if (!document.fullscreenElement) { renderer.domElement.requestFullscreen(); // 进入全屏 } else { document.exitFullscreen(); // 退出全屏 }});
10. 图形用户界面(dat.GUI)import * as dat from "dat.gui";const gui = new dat.GUI();// 控制位置gui.add(cube.position, "x").min(0).max(5).step(0.1).name("X轴位置");// 控制颜色const params = { color: "#ffff00" };gui.addColor(params, "color").onChange((value) => { cube.material.color.set(value);});// 添加文件夹const folder = gui.addFolder("立方体");folder.add(cube.material, "wireframe"); // 线框模式
关键点总结「动画循环」:使用requestAnimationFrame
实现平滑动画。