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)
结果
相关推荐
0思必得026 分钟前
[Web自动化] Selenium处理动态网页
前端·爬虫·python·selenium·自动化
东东5161 小时前
智能社区管理系统的设计与实现ssm+vue
前端·javascript·vue.js·毕业设计·毕设
catino1 小时前
图片、文件的预览
前端·javascript
layman05283 小时前
webpack5 css-loader:从基础到原理
前端·css·webpack
半桔3 小时前
【前端小站】CSS 样式美学:从基础语法到界面精筑的实战宝典
前端·css·html
AI老李3 小时前
PostCSS完全指南:功能/配置/插件/SourceMap/AST/插件开发/自定义语法
前端·javascript·postcss
_OP_CHEN3 小时前
【前端开发之CSS】(一)初识 CSS:网页化妆术的终极指南,新手也能轻松拿捏页面美化!
前端·css·html·网页开发·样式表·界面美化
啊哈一半醒3 小时前
CSS 主流布局
前端·css·css布局·标准流 浮动 定位·flex grid 响应式布局
PHP武器库3 小时前
ULUI:不止于按钮和菜单,一个专注于“业务组件”的纯 CSS 框架
前端·css
电商API_180079052473 小时前
第三方淘宝商品详情 API 全维度调用指南:从技术对接到生产落地
java·大数据·前端·数据库·人工智能·网络爬虫