项目需求:要将3d模型显示在网页上 并实现时时旋转和鼠标悬停功能.给我的3d模型是60M的obj文件

threejs加载obj模型比较简单但加载时间很长 毕竟60m的文件网络传输需要很长时间

obj模型太大 必须想办法压缩 google的第一个链接就有解决办法

image.png

image.png

第一步 将obj转换成gltf文件

通过obj2gltf工具 可以吧obj转换成gltf文件 大小大约为20M 但是还是很大 因为在网络不好的环境下下载20m文件还是需要很长时间

threejs 显示20m的gltf文件为1s

第二步 使用draco压缩gltf文件

gltf-pipeline工具可以压缩gltf文件 大小大约2m 但是又有新的问题 threejs在加载的时候需要解压缩 也就是说显示2m的文件需要5s的时间 而且每次刷新都需要重新解压缩 每一次刷新都需要5s的时间显示3d模型.

下图分别是 gltf文件 obj文件 和压缩的gltf文件的大小

image.png

那么现在有两种方案

方案一

使用20m的gltf文件加浏览器缓存 那么只有在第一次的时候需要加载20m的文件 以后每次刷新都只需要1s的时间显示模型

方案二

使用压缩后的gltf文件 第一次只需要加载2m的文件 但每次刷新都需要5s的时间显示模型

我们仔细考虑一下这两个方案

方案一 优点 每次刷新加载的时间只需要1s

方案二 优点 只需要加载2m的gltf文件

那么怎么把这两个方案的优点结合起来 实现 只需要加载2m的文件 又可以让模型的显示只需要1s

自然而然就可以想到

方案三

加载2m的文件 在第一次解压后 将解压的数据存起来 然后每一次刷新 直接取存好的数据这样就可以 实现 即加载2m的文件又可以让模型的显示只需要1s

那么怎样实现数据的存储 因为 localstorage最大存储为5m 并不能存大量的数据 所以只能使用indexdb 但使用indexdb的时候是又有新的问题

在第一次解压后 将数据存储起来需要3s的时间 也就是说 第一次显示模型 需要8s(5s的解压缩+3s的存储)

虽然就第一次慢一些 后面每一次刷新都只需要1s的时间

但是还是不能容忍 要客户等待8s 的时间

那么怎样实现 第一次显示也很快 那么自然而然想到 当客户还没进入到模型显示页面的时候 就已经开始加载这些数据 能不能像java那样使用多线程 换句话说 在用户登录的时候另一个线程就已经开始加载模型 解压缩 存储数据 ,然后第一次显示模型的时候就直接从数据库取数据

通过了解发现 webworker就可以实现那么就有了方案四

方案四

在登录页面时利用webworker加载模型 解压缩 存储数据 当用户进入到模型页面时从数据库取数据直接加载 实现第一次秒加载和后续的秒加载

思维导图.png

上面是研究过程 但是在实际应用中 由于我们自己有3d结构师 通过把模型精简 obj文件只有36m 压缩后的gltf只有2m 考虑到浏览器支持和代码复杂度 最终使用方案三

java3d载入obj_Threejs大型obj文件的秒加载实现相关推荐

  1. javascript 文件的同步加载与异步加载

    原文:[转载]javascript 文件的同步加载与异步加载 HTML 4.01 的script属性 charset: 可选.指定src引入代码的字符集,大多数浏览器忽略该值. defer: bool ...

  2. 解读年度数据库性能:PostgreSQL的日志文件和数据加载

    墨墨导读:本文主要介绍PostgreSQL的日志文件参数及注意事项,从csv日志中载入数据库.通过灵活的数据加载方式,让SQL在处理很多问题上更加简捷便利. 运行日志参数 1.1 运行日志主要参数 运 ...

  3. PostgreSQL的日志文件和数据加载

    墨墨导读:本文主要介绍PostgreSQL的日志文件参数及注意事项,从csv日志中载入数据库.通过灵活的数据加载方式,让SQL在处理很多问题上更加简捷便利. 运行日志参数 1.1 运行日志主要参数 运 ...

  4. app启动页数秒加载 代码_iOS 底层探索 - 应用加载

    一.前导知识 以下参考自 WWDC 2016 Optimizing App Startup Time : 1.1 Mach-O Mach-O is a bunch of file types for ...

  5. drawboard pdf拆分文件_掌握在线PDF拆分技巧,从此打开文件不再处于“加载中”...

    随着生活节奏的加快,我们身边的事物渐渐地处于"加载中",到奶茶店买杯奶茶需要加载,玩个游戏处于"加载中",就连工作时打开一个PDF文件都是"加载中&q ...

  6. 图片在xml文件中直接加载.9文件

    图片在xml文件中直接加载.9文件,可能会因为图片压缩的缘故产生锯齿,如果使用 ImageView imageview = (ImageView) view .findViewById(R.id.in ...

  7. oracle ocx加载错误,怎么对.ocx格式的文件进行注册加载?出现0x8002801c错误怎么办?...

    很多用户在安装使用软件时,会要求注册加载一个.ocx格式的控件,否则软件程序就无法运行.有的用户在注册这个控件时还会出现错误,提示对DllRegisterServer调用失败,错误代码为0x80028 ...

  8. Vue文件内动态加载JS

    Vue文件内动态加载JS let jsUrl = 'https://code.jquery.com/jquery-3.4.1.min.js' // JS地址 let jqueryJs = decode ...

  9. 打开dll文件时模块加载失败,请确保二进制存储在指定的路径中,或者调试它以检查该二进制或相关的.DLL文件是否有问题

    ** 打开dll文件时模块加载失败,请确保二进制存储在指定的路径中,或者调试它以检查该二进制或相关的.DLL文件是否有问题 **打开dll文件时模块加载失败,电脑提示请确保二进制存储在指定的路径中,或 ...

最新文章

  1. 【微信小程序之画布】终:手指触摸画板实现
  2. 继往开来!目标检测二十年技术综述
  3. ACM-ICPC 2017 Asia Nanning
  4. Servlet与JSP间的传值问题
  5. C51单片机————总线与系统扩展
  6. python面向对象属性_Python面向对象属性
  7. 19.docker attach
  8. JAVA输出希腊字母表
  9. 大器晚成总比一事无成要强
  10. 互联网思维——平台思维
  11. 数据分析基础篇16讲之02学习数据挖掘的最佳路径是什么?
  12. Python快速编程入门#学习笔记06# |第6章 :函数(学生管理系统)
  13. WRDS卓越学者和沃顿研究数据与分析图书馆员会议在北京宾大沃顿中国中心举行:庆祝研究、思想领导力和全球合作方面的创新
  14. 云影数码工作室-创业计划书
  15. 微信双开多开电脑版本教程(免费简单易学真实可用)
  16. ElementUi轮播图走马灯添加图片
  17. HTB打靶(Active Directory 101 Sizzle)
  18. Java实现头像上传
  19. Python模块、包与面向对象综合案例
  20. 关于域名备案的注意事项

热门文章

  1. css有几种选择器,有什么区别?
  2. 【BFS 广度优先搜索】详解感染橘子最短时间问题
  3. 【C语言】一文彻底理解指针,通俗易懂
  4. 怎么在cmd中运行python脚本_cmd中运行python脚本智能使用流程
  5. 手机远程连接linux软件下载,远程连接linux服务器软件下载
  6. Perl操作excel2007的模块
  7. 学生专用计算机怎么调时间,学生计算器怎么调时间
  8. 查看UiPath许可证状态
  9. Tkinter定时刷新页面或数据
  10. 【每天读一点英文】gnuhpc:The World As I See It(节选)