位置: IT常识 - 正文

压缩gltf/glb模型踩坑与解决 three.js DRACOLoader(压缩模制)

编辑:rootadmin
压缩gltf/glb模型踩坑与解决 three.js DRACOLoader 前言

推荐整理分享压缩gltf/glb模型踩坑与解决 three.js DRACOLoader(压缩模制),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:压缩模制,模型压缩综述,压缩模设计,压缩模制,压缩模型怎么做,压缩模型怎么做,压缩模设计,模型压缩综述,内容如对您有帮助,希望把文章链接给更多的朋友!

使用前端three.js加载3d模型过程中,往往会出现模型大小过大导致前端加载时间过长,降低用户体验。 本文所记录的是笔者在使用gltf-pipeline压缩3d模型中踩坑DRACOLoader与解决的一个过程。

所采用的three库版本为 ^0.138.2

解决方案与介绍

通过gltf-pipeline可以大幅度压缩gltf/glb模型文件。

并且有如下的作用

将 glTF 转换为 glb(和反向)将缓冲区/纹理保存为嵌入或单独的文件将 glTF 1.0 模型转换为 glTF 2.0(使用KHR_techniques_webgl和KHR_blend扩展)应用Draco网格压缩安装npm install -g gltf-pipeline

或者

yarn global add gltf-pipeline常用压缩命令gltf-pipeline -i model.glb -o modelDraco.glb -d

使用 Draco 压缩网格 model.glb 文件,modelDraco.glb为压缩后输出文件名

gltf-pipeline -i model.glb -o modelDraco.glb -d -s

压缩并编写单独的缓冲区、着色器和纹理。

在three.js中使用Draco压缩网格后的文件坑与解决过程

在多次百度之后写出的代码

let dracoLoader = new DRACOLoader();dracoLoader.setDecoderPath("path"); dracoLoader.preload();const loader = new GLTFLoader().setPath("path");loader.setDRACOLoader(dracoLoader);loader.load("modelName", (gltf) => { scene.addObject(gltf.scene); gltf = null;});压缩gltf/glb模型踩坑与解决 three.js DRACOLoader(压缩模制)

在这里我遇到了一个大坑:

Uncaught SyntaxError: Unexpected token '<'

解决:

在问题过程排查中,发现网络请求是请求了模型数据的

后续发现bolb:xxx的请求不是写的应用层所发出的 之后通过阅读DRACOLoader.js的源码得

网络请求中bolb:xxx请求是由第250行URL.createObjectURL所创建的,创建该请求需要

draco_decoder.jsdraco_wasm_wrapper.jsdraco_decoder.wasm

并且请求的路径是使用setDecoderPath方法所设定

后续查阅资料得到

draco_decoder.js— Emscripten 编译的解码器,与任何现代浏览器兼容。draco_decoder.wasm— WebAssembly 解码器,与较新的浏览器和设备兼容。draco_wasm_wrapper.js— WASM 解码器的 JavaScript 包装器。

在node_modules安装的包中获取three版本对应的draco路径为 node_modules\three\examples\js\libs

将改文件夹复制到public文件夹下并在DRACOLoader.setDecoderPath时候设置该对应路径即可

最后的解决代码与自己的封装import { DRACOLoader } from "three/examples/jsm/loaders/DRACOLoader";import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js";/** * * path:存放模型父路径 * modelName:模型名 * setCenter:是否居中 * scale:模型的缩放比设定 * position:模型的位置 * rotation:模型的局部旋转 */function loadModuleByDRACOLoader( path, modelName, setCenter, scale, position, rotation) { let scaleVec3, positionVec3; if (typeof scale == "number") { scaleVec3 = new THREE.Vector3(scale, scale, scale); } else { scaleVec3 = new THREE.Vector3(scale.x, scale.y, scale.z); } if (typeof position == "number") { positionVec3 = new THREE.Vector3(position, position, position); } else { positionVec3 = new THREE.Vector3(position.x, position.y, position.z); } let dracoLoader = new DRACOLoader(); dracoLoader.setDecoderPath("./moduler/draco/"); // 设置public下的解码路径,注意最后面的/ dracoLoader.setDecoderConfig({ type: "js" }); //使用兼容性强的draco_decoder.js解码器 dracoLoader.preload(); const loader = new GLTFLoader().setPath(path); loader.setDRACOLoader(dracoLoader); return new Promise((res, rj) => { loader.load(modelName, (gltf) => { if (setCenter) { gltf.scene.traverse(function(child) { if (setCenter && child.isMesh) { child.geometry.center(); } }); } gltf.scene.scale.copy(scaleVec3); gltf.scene.position.copy(positionVec3); if (rotation) { gltf.scene.rotation.copy(rotation); } scene.add(gltf.scene); res(gltf.scene); gltf = null; }); });}

调用

loadModuleByDRACOLoader('./moduler/', "grow4-processed.glb", false, 1, 0)结语

因为遇到这个坑之后没有找到对应的解决方法,所以写了该文章作为记录也给遇到相同问题的开发者避坑。

还有🎇🎇大三求内推🎇🎇

本文链接地址:https://www.jiuchutong.com/zhishi/283920.html 转载请保留说明!

上一篇:吃鸡显卡用GTX1060好还是RX580好?(吃鸡显卡推荐配置1060 5g)

下一篇:vue 中从后端获取到文件的 url 地址,前端根据 url 地址下载文件(vue怎么拿到后端数据)

  • 台式电脑蓝牙设备在哪里(台式电脑蓝牙设置在哪里打开)

    台式电脑蓝牙设备在哪里(台式电脑蓝牙设置在哪里打开)

  • 荣耀30如何设置指纹解锁(荣耀30如何设置自定义动态锁屏)

    荣耀30如何设置指纹解锁(荣耀30如何设置自定义动态锁屏)

  • 珍爱网屏蔽对方知道吗(珍爱网屏蔽对方还能看到我的资料吗)

    珍爱网屏蔽对方知道吗(珍爱网屏蔽对方还能看到我的资料吗)

  • 抖音钻怎么集(抖音怎么集钻卡)

    抖音钻怎么集(抖音怎么集钻卡)

  • 小米mdt6是什么型号

    小米mdt6是什么型号

  • 钉钉退出企业后考勤还在么(钉钉退出企业后群还在吗)

    钉钉退出企业后考勤还在么(钉钉退出企业后群还在吗)

  • p30有没有无线充电功能(p30手机有没有无线充电)

    p30有没有无线充电功能(p30手机有没有无线充电)

  • 华为p40手机耳机孔在哪里(华为P40手机耳机设置在哪开启)

    华为p40手机耳机孔在哪里(华为P40手机耳机设置在哪开启)

  • 惠普打印机黄灯闪烁不打印东西怎么办(惠普打印机黄灯亮怎么回事)

    惠普打印机黄灯闪烁不打印东西怎么办(惠普打印机黄灯亮怎么回事)

  • 联想电脑一直卡在lenovo(联想电脑一直卡在lenovo进不了bios)

    联想电脑一直卡在lenovo(联想电脑一直卡在lenovo进不了bios)

  • 华为soc芯片是什么(华为soc芯片概念股)

    华为soc芯片是什么(华为soc芯片概念股)

  • oppor11相机声音怎么关(oppo 相机声音)

    oppor11相机声音怎么关(oppo 相机声音)

  • 苹果11突然死机是怎么回事(苹果11突然死机了 关不了 咋办)

    苹果11突然死机是怎么回事(苹果11突然死机了 关不了 咋办)

  • 微信临时链接多久失效(微信临时链接可以转发吗)

    微信临时链接多久失效(微信临时链接可以转发吗)

  • excel2010的主要功能包括(excel2010的主要功能)

    excel2010的主要功能包括(excel2010的主要功能)

  • 电脑无信号是什么情况(电脑无信号是什么原因,应该怎么处理)

    电脑无信号是什么情况(电脑无信号是什么原因,应该怎么处理)

  • 小米八青春版支持18瓦快充吗(小米八青春版支持OTG吗)

    小米八青春版支持18瓦快充吗(小米八青春版支持OTG吗)

  • ps怎么取消切片(ps怎么取消切片模式)

    ps怎么取消切片(ps怎么取消切片模式)

  • 华为mate30怎么设置桌面时钟(华为mate30怎么设置锁屏)

    华为mate30怎么设置桌面时钟(华为mate30怎么设置锁屏)

  • 微信分数在哪里看(微信分数在哪里看?微信分组在哪里看?)

    微信分数在哪里看(微信分数在哪里看?微信分组在哪里看?)

  • 快手极速版我的收藏在哪(快手极速版我的订单在哪里)

    快手极速版我的收藏在哪(快手极速版我的订单在哪里)

  • 微信隐私密码怎么解除(微信隐私密码怎么设置)

    微信隐私密码怎么解除(微信隐私密码怎么设置)

  • soul怎么看访问记录(soul怎么看访客)

    soul怎么看访问记录(soul怎么看访客)

  • 酷喵怎么看电视直播(酷喵怎么看电视频道视频)

    酷喵怎么看电视直播(酷喵怎么看电视频道视频)

  • 保护电脑安全的几个方法(保护电脑安全的主要方式)

    保护电脑安全的几个方法(保护电脑安全的主要方式)

  • 已认证进项税额怎么结转
  • 买房子一定要交税吗
  • 企业利息收入需要交哪些税
  • 汇算清缴银行手续费
  • 建账的主要流程
  • 核定征收企业需要做账吗
  • 纳税申报现金流量表报错了可以重新申报吗
  • 货币资金核算的调查报告
  • 公司代缴的社保个人账户能不能查到
  • 充值费用优惠怎么取消
  • 下个月的发票可以报销上个月的费用吗
  • 收到公司of
  • 个人所得税返还奖励财务人员做账
  • 发票纳税人识别号错了能重新开吗
  • 营改增后工程税收怎么计算
  • 专家评审费个人所得税由谁支付
  • 税收强制执行措施包括哪些
  • 固定资产清理账户期末有余额吗
  • 经营租赁中出租人发生的初始直接费用是指
  • 未办土地有偿使用手续多少钱
  • 一般纳税人进项税会计分录
  • 餐饮充值赠送
  • 员工给公司代垫的款项分录
  • bios术语
  • cmd常用命令大全图解
  • 原始股东减持要交多少税
  • 金蝶软件反年结账怎么弄
  • multiple editions是什么版本
  • CENTOS7安装报错
  • 筹建期间费用计什么科目
  • Win10 KB5005033 给某些用户带来了新问题的解决方法
  • php中字符串函数
  • 其他业务成本主要有哪些
  • 增值税发票怎么抵税
  • 孕妇能吃荔枝吗 孕晚期
  • vue多模块多项目集成
  • PHP:escapeshellarg()的用法_命令行函数
  • 用友结算成本处理的作用
  • 下一页分页符中间空白页
  • latex希腊字母斜体
  • 土地增值税清算全流程实战案例
  • php正则替换字符串
  • 发票查询密码区空白怎么回事
  • 筹办期间发生的广告费和业务宣传费可以扣除吗
  • c语言中使用指针的好处
  • Python psd-tools如何转换文件
  • 万元版和十万元版发票图片
  • 预付账款需要做预算凭证吗
  • 微店企业店铺和个人店铺的区别
  • 购入不动产的税率是多少
  • 公司法人代表可以有几个
  • 长期待摊费用好处
  • 收到现金长时间不付款
  • 怎样暂估成本的会计分录
  • 个人咨询费发票怎么开
  • 物流公司贷款
  • 费用本期发生额怎么算
  • 税控维护费减免税款
  • 行政单位收到银行存款利息的会计分录
  • 应收利息可以计提坏账准备吗
  • 营改增之后账务怎么处理
  • 进口材料是什么意思
  • 债权投资和其他应收款的区别
  • 外帐和内帐区别
  • 什么叫归集和分配
  • sql取汉字
  • win7系统出现reboot and
  • centos怎么安装软件包
  • scm是啥
  • ie无法打开https
  • windows svchost
  • android游戏开发框架
  • 原生封装ajax
  • js 键盘码
  • linux中unzip解压完看不到文件
  • django实时刷新日志前端
  • 深入理解python递归
  • 内蒙古低保信息网
  • 东莞国家税务局横沥分局
  • 浙江省税务师事务所排名
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设