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

Three.js 生成模型底座教程

Three.js 生成模型底座教程
📅 发布时间:2026/6/28 22:03:16

生成模型底座 ·Model Base· ▶ 在线运行案例

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

你将学到什么

  • OrbitControls 相机轨道交互
  • glTF/Draco 模型加载与优化
  • 监听窗口resize同步更新 camera 与 renderer

效果说明

本案例演示生成模型底座效果:基于 WebGL 实现「生成模型底座」可视化效果,附完整可运行源码;核心用到 OrbitControls、glTF/Draco。建议先打开文首在线案例查看动态画面,再对照下方源码逐步理解。

核心概念

  • Loader异步加载模型;glTF 返回gltf.scene,加载后注意scale与坐标系。Draco 需配置DRACOLoader。
  • OrbitControls轨道旋转缩放;开enableDamping时每帧需controls.update()。
  • CubeTexture六面贴图作scene.background;scene.environment供 PBR 材质反射。

实现步骤

  • 搭建 Scene / Camera / Renderer 与 OrbitControls
  • Loader 异步加载模型/纹理资源
  • rAF 循环中 update 并 render
  • 代码要点

    import * as THREE from 'three';

    import { OrbitControls } from "three/examples/jsm/Addons.js"; import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js' import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js' const DOM = document.getElementById('box')

    var scene = new THREE.Scene(); scene.background = new THREE.Color('gainsboro');

    var camera = new THREE.PerspectiveCamera(30, innerWidth / innerHeight); camera.position.set(0, 4, 4); camera.lookAt(scene.position);

    var renderer = new THREE.WebGLRenderer({ antialias: true }); renderer.setSize(innerWidth, innerHeight); renderer.setAnimationLoop(animationLoop);

    function animationLoop() { renderer.render(scene, camera); } DOM.appendChild(renderer.domElement);

    window.addEventListener("resize", () => { camera.aspect = innerWidth / innerHeight; camera.updateProjectionMatrix(); renderer.setSize(innerWidth, innerHeight); });

    var controls = new OrbitControls(camera, renderer.domElement); controls.enableDamping = true; controls.autoRotate = true;

    var light = new THREE.DirectionalLight('white', 3); light.position.set(1, 1, 1); scene.add(light);

    let group

    const loader = new GLTFLoader()

    loader.setDRACOLoader(new DRACOLoader().setDecoderPath(FILE_HOST + 'js/three/draco/'))

    loader.load(

    HOST + '/files/model/car.glb',

    function (gltf) {

    group = gltf.scene

    scene.add(group) add_model_base() }

    )

    // 模型底座 function add_model_base(){ const box = new THREE.Box3() box.setFromObject(group) // const helper = new THREE.Box3Helper(box) // scene.add(helper) const center = box.getCenter(new THREE.Vector3()) const size = box.getSize(new THREE.Vector3()) const shape = new THREE.Shape() shape.moveTo(center.x,center.z) // 底座大小在这控制 这里取半径的根号2倍 let radius = Math.max(size.x,size.z) / 2 * Math.sqrt(2) shape.arc(0,0,radius,0,Math.PI * 2) let m = new THREE.MeshBasicMaterial({color:'red',side:2}) const geo = new THREE.ShapeGeometry(shape,32) const mesh = new THREE.Mesh(geo,m) geo.center() mesh.rotateX(-Math.PI / 2) scene.add(mesh) }

    完整源码:GitHub

    小结

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

相关新闻

  • 如何高效使用PowerToys中文版:提升Windows效率的完整指南
  • 百度网盘秒传链接工具终极指南:三步掌握文件闪电转存
  • 联想拯救者工具箱:三步掌握笔记本性能优化的终极免费方案

最新新闻

  • 瑞萨RA8P1高速模拟比较器与数据运算电路配置实战指南
  • 三分钟上手Scarab:让空洞骑士模组管理变得轻松简单
  • Cursor Pro激活工具:突破试用限制的智能解决方案
  • 终极指南:如何用React-Icons构建高性能SVG图标系统
  • 汇编语言(王爽)课后习题精解与实战演练
  • STM32 SPI驱动W25Q64:从指令解析到数据流高效管理

日新闻

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

周新闻

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

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

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

服务项目

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

快速链接

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

联系方式

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

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