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

引入模型的知识点整理(Three.js)

以下是关于在 Three.js 中引入模型的完整知识点梳理,包括常用格式、加载方式、动画、压缩、示例代码等内容:


✅ 一、常见3D模型文件格式

格式

特点

.glTF

推荐格式,结构清晰,支持动画、材质、骨骼等,体积小,加载快

.glb

glTF 的二进制版,所有资源打包成一个文件,更方便部署与加载

.obj

老牌格式,广泛支持,但不支持动画和高级材质

.fbx

支持动画,但体积较大,解析较慢,常用于动画资产

.dae

Collada 格式,支持动画和材质,兼容性较好


✅ 二、glTF模型的优势

  • 支持材质、动画、骨骼、Morph Target
  • 可压缩(DRACO)
  • 支持二进制形式(.glb
  • 是Three.js推荐的标准模型格式

✅ 三、Three.js中加载 glTF 模型

1. 基本加载器

import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'

const loader = new GLTFLoader()
loader.load('models/Fox.glb', (gltf) => {
  scene.add(gltf.scene)
})

2. 加载带动画的 glTF 模型

let mixer
loader.load('models/Fox.glb', (gltf) => {
  scene.add(gltf.scene)
  mixer = new THREE.AnimationMixer(gltf.scene)
  const action = mixer.clipAction(gltf.animations[0])
  action.play()
})
// 在动画循环中更新
if (mixer) {
  mixer.update(deltaTime)
}

3. 加载使用 DRACO 压缩的模型

DRACO 可大幅压缩模型体积:

import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js'

const dracoLoader = new DRACOLoader()
dracoLoader.setDecoderPath('/draco/') // 放置 decoder 的路径

const gltfLoader = new GLTFLoader()
gltfLoader.setDRACOLoader(dracoLoader)

gltfLoader.load('models/compressedModel.glb', (gltf) => {
  scene.add(gltf.scene)
})

✅ 四、场景中的模型处理技巧

  • .scale.set(x, y, z):缩放模型
  • .position.set(x, y, z):设置位置
  • .rotation.y = Math.PI:旋转模型
  • .traverse():遍历模型所有子物体(可修改材质等)
gltf.scene.traverse((child) => {
  if (child.isMesh) {
    child.castShadow = true
    child.receiveShadow = true
  }
})

✅ 五、glTF 模型的文件结构(典型)

/models/Fox/
├── Fox.gltf          ← 主 glTF 文件(JSON 结构)
├── Fox.bin           ← 二进制几何数据
├── textures/
│   └── texture.png   ← 材质纹理文件

或者:

Fox.glb ← 所有内容打包成一个文件

✅ 六、进度 & 错误处理

loader.load(
  'models/Fox.glb',
  (gltf) => { scene.add(gltf.scene) },
  (progress) => {
    console.log(`Loading: ${progress.loaded / progress.total * 100}%`)
  },
  (error) => {
    console.error('Error loading model:', error)
  }
)

✅ 七、实践建议

  • 使用 glTF Viewer 查看模型结构
  • 使用 Blender 导出 .glb.gltf
  • 如果模型过大 → 使用 DRACO 压缩(Blender 或 gltf-pipeline 工具)

相关文章:

  • 阅读笔记“BFMSense”
  • MVS 无监督学习
  • docker各种清空缓存命令,下载jdk包总失败,执行完好了
  • BUUCTF-web刷题篇(15)
  • SeaTunnel系列之:部署SeaTunnel的Spark和Flink引擎
  • 时序数据库 TDengine Cloud 私有连接实战指南:4步实现数据安全传输与成本优化
  • (二)链表结构
  • Redis-一般操作
  • 深入理解CSS对齐属性:align-items, align-self, justify-items, justify-self
  • EasyExcel结合多线程+控制sheet页全量导出
  • 【每日随笔】目标制定的 “ 降维哲学 “ ( 目标过高引发 “ 行动力损耗 “ | 目标过低引发 “ 结果递减 “ | 目标制定最佳策略 )
  • 【Java设计模式】第2章 UML急速入门
  • #MongoDB 快速上手
  • swift-08-属性、汇编分析inout本质
  • StarRocks 助力首汽约车精细化运营
  • react实现上传图片到阿里云OSS以及问题解决(保姆级)
  • Spring中使用Kafka的详细配置,以及如何集成 KRaft 模式的 Kafka
  • 数据结构和算法(十二)--最小生成树
  • 做好一个测试开发工程师第二阶段:java入门:idea新建一个project后默认生成的.idea/src/out文件文件夹代表什么意思?
  • 基于开源AI大模型AI智能名片S2B2C商城小程序,探究私域电商中人格域积累与直播电商发展
  • 男女做网站/手机优化大师怎么退款
  • 网站开发维护招聘/可以入侵的网站
  • 网站建设属于什么经济科目/网络推广理实一体化软件
  • 在线做图表的网站/磁力搜索引擎不死鸟
  • 临海受欢迎营销型网站建设/按效果付费的网络推广方式
  • 建设银行徐州分行网站/论坛推广平台有哪些