Three.js第八课-模型加载GLTF & 模型解压Draco

Web开发中用的最多的3D格式是GLTF格式,因此接下来谈谈GLTF~

GLTF加载器

  • 介绍:GLTF(Graphics Language Transmission Format)是一种用于传输和加载3D模型及其相关数据的开放标准格式。
  • 格式:glb是二进制格式数据,gltf是JSON格式数据
  • 特点
  1. 开放标准:GLTF是一个开放标准,可由任何人使用和扩展。它基于JSON格式,易于解析和操作。
  2. 文件小:GLTF使用二进制格式存储3D模型数据,相比于传统文本格式,可以大幅减小文件大小。此外,GLTF还支持数据压缩,进一步提高了传输效率。
  3. 资源共享:GLTF支持引用外部资源,如纹理、材质和动画等,可以减少模型文件的大小,避免重复存储相同的数据。
  4. 内存友好:GLTF可以在加载过程中进行渐进式加载,按需加载模型的不同部分,从而减少内存占用和提高加载速度。
  5. 兼容性强:GLTF格式得到了广泛的支持,可以在多个平台和应用程序中使用。它可以在WebGL、OpenGL ES以及其他图形API中直接解析和渲染。
  6. 扩展性:GLTF支持扩展,可以通过添加自定义扩展来满足特定应用的需求,如PBR材质、骨骼动画等。
  • 使用:使用3D建模软件或者在线转换工具将现有的3D模型转换为GLTF格式,然后在应用程序或Web上使用

Three.js使用GLTF加载器加载模型

引入GLTF模型加载器
javascript 复制代码
// 导入GLTF模型加载器
import {GLTFLoader} from 'three/examples/jsm/loaders/GLTFLoader'
实例化GLTF模型加载器
arduino 复制代码
// 实例化加载器
const gltfLoader=new GLTFLoader()
加载GLTF模型
javascript 复制代码
gltfLoader.load(
    // 模型路径
    "/src/assets/model/Duck.glb",
    // 加载后回调
    (gltf)=>{
        //将模型添加到场景中
        scene.add(gltf.scene)
    }
)
效果
添加环境贴图

根据上述效果看到,鸭子是黑色的,那是因为基础材质MeshBasicMaterial需要光照才能看到本身的颜色,因此我们来添加环境贴图,增加光照,使用上一节的知识RGBELoader加载器

引入RGBELoader加载器
javascript 复制代码
import {RGBELoader} from 'three/examples/jsm/loaders/RGBELoader'
实例化RGBELoader加载器
csharp 复制代码
let rgbaLoader=new RGBELoader()
加载环境贴图
ini 复制代码
rgbaLoader.load("/src/assets/texture/graybg.hdr",(envMap)=>{
    envMap.mapping=Three.EquirectangularReflectionMapping;
    // 设置环境贴图
    scene.environment=envMap
})
效果

模型解压Draco

  • 介绍:Google开发用于3D模型压缩和解压缩的开源库
  • 作用:减少3D模型的文件大小,从而加快加载速度并减少网络流量
  • API:DRACOLoader加载器
  • 使用:将非常大的压缩过的模型文件使用Draco进行解压,然后关联GLTF加载器

Three.js使用Draco解压模型

导入Draco加载器
javascript 复制代码
// 导入Draco加载器
import {DRACOLoader} from 'three/examples/jsm/loaders/DRACOLoader'
复制粘贴Three的Draco文件夹到本地static中
bash 复制代码
路径 three/examples/jsm/libs/draco
实例化Draco解析器
arduino 复制代码
// 实例化Draco解析器
const dracoLoader=new DRACOLoader()
设置Draco路径(路径为刚刚复制粘贴的路径)
arduino 复制代码
// 设置Draco路径
dracoLoader.setDecoderPath("/draco/")
加载GLTF模型
javascript 复制代码
gltfLoader.load(
    // 模型路径
    "/src/assets/model/road.glb",
    (gltf)=>{
        scene.add(gltf.scene)
    }
)
设置GLTF模型加载器对应的Draco解析器(关联)
scss 复制代码
gltfLoader.setDRACOLoader(dracoLoader)
结果
相关推荐
腾讯TNTWeb前端团队4 小时前
helux v5 发布了,像pinia一样优雅地管理你的react状态吧
前端·javascript·react.js
范文杰8 小时前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪8 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪8 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy9 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom9 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom9 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom9 小时前
React与Next.js:基础知识及应用场景
前端·面试·github
uhakadotcom10 小时前
Remix 框架:性能与易用性的完美结合
前端·javascript·面试
uhakadotcom10 小时前
Node.js 包管理器:npm vs pnpm
前端·javascript·面试