当前位置: 首页 > news >正文

Three.js 生成模型底座教程

生成模型底座 ·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.backgroundscene.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 开源仓库
http://www.cnnetsun.cn/news/3043512.html

相关文章:

  • 5分钟掌握AlwaysOnTop:终极窗口置顶工具完整指南
  • 从官方库看DSP与STM32的算法生态差异
  • Kutools for Excel:解锁300+高阶功能,重塑你的数据处理工作流
  • 终极窗口置顶工具:让你的重要窗口始终在最上层显示
  • CMS权限绕过与文件上传漏洞剖析:从.htaccess编辑到Webshell上传
  • 2024_Spark_实战指南:基于Direct方式的SparkStreaming与Kafka实时数据管道构建
  • 如何用Upscayl实现智能AI图像放大:免费开源的高清修复终极指南
  • 如何彻底解决REFramework在《街头霸王6》在线对战中出现的软锁问题
  • 051、Transformer Block 替代 Neck 中的 C3k2:全局上下文聚合的提升与成本
  • 【技术深潜】RT-1:Transformer如何重塑机器人“大脑”,实现97%指令成功率与零样本泛化
  • 终极指南:如何用智能激活脚本一键搞定Windows和Office?
  • 高阶力常数插值方法:从理论到声子谱绘制的实践指南
  • B站视频下载神器:解锁大会员4K和充电专属内容的终极方案
  • 从冰桶到屏蔽罩:法拉第笼的电磁屏蔽原理与日常应用
  • 开源音乐聚合终极方案:MusicFreePlugins完整指南
  • 【LeRobot】:端到端机器人学习的全栈开源框架——从硬件驱动到模型训练部署的完整闭环
  • Win11 下 PHPstudy 一站式部署与避坑指南
  • 照着教程搭了电商AI批量出图工作流,500张图全废了
  • 【避坑指南】企业级Conda环境离线迁移实战:从打包到部署的完整闭环
  • CNVD漏洞审核实战指南:从提交到收录的避坑要点
  • 企业HR系统安全评估实战:从越权访问到逻辑漏洞的组合挖掘
  • 5步搞定加密视频下载:res-downloader视频解密工具终极实战指南
  • 文件上传漏洞实战:从原理到防御,剖析企业应用安全风险
  • 从零到一:基于`majiang-cocos-creator`快速构建你的首款跨平台麻将游戏
  • Xenos完全指南:Windows DLL注入从零到精通
  • CQRS架构——让“读写分离“更优雅
  • Go Defer 深度解析:看似简单,步步惊心
  • 终极RVC语音转换完整指南:5步掌握AI变声核心技术
  • 如何用RVC-WebUI在5分钟内实现专业级AI音色转换
  • 加密流量监控实战:解密MITM、元数据分析与合规成本平衡