three.js DRACOLoader压缩模型-程序员宅基地

技术标签: webgl  js  three.js  

安装gltf-pipeline

  • 全局安装gltf-pipeline  npm i -g gltf-pipeline
  • gltf-pileline优点
    • gltf和glb模型相互转换
    • 压缩gltf和glb 
    • 可以选择分离纹理图片
    • 获取glb或gltf信息资源
  • 使用终端运行
    gltf-pipeline -i model.gltf -o model.glb -d
  • 参数 描述 必须/默认
    --help-h 查看帮助 No
    --input-i 输入一个gltf模型文件.  Yes
    --output-o 输出一个gltf或者glb文件,文件会存储在相同的目录 No
    --binary-b 转换gltf模型到glb模型 No, default false
    --json-j 转换glb模型到gltf模型 No, default false
    --separate-s 分离纹理图片和bin文件至单独的文件 No, default false
    --separateTextures-t 仅仅只分离纹理图片 No, default false
    --stats 在终端输出gltf文件信息 No, default false
    --keepUnusedElements 保存未使用过的材质,节点,网格对象 No, default false
    --draco.compressMeshes-d 使用Draco经行压缩,默认不压缩 No, default false
    --draco.compressionLevel 压缩的级别0-10 级别越大,压缩程度越大,文件越小 No, default 7
    --draco.quantizePositionBits 使用 Draco 压缩时位置属性的量化位.  取值为0-29,值越小,文件越小  No, default 14
    --draco.quantizeNormalBits Quantization bits for normal attribute when using Draco compression. No, default 10
    --draco.quantizeTexcoordBits Quantization bits for texture coordinate attribute when using Draco compression. No, default 12
    --draco.quantizeColorBits Quantization bits for color attribute when using Draco compression. No, default 8
    --draco.quantizeGenericBits Quantization bits for skinning attribute (joint indices and joint weights) and custom attributes when using Draco compression. No, default 12
    --draco.unifiedQuantization Quantize positions of all primitives using the same quantization grid. If not set, quantization is applied separately. No, default false
    后面几个参数一般来说都用不到 一般会添加-b在加一个压缩级别

使用node写了一个批处理文件,运行之前先安装gltf-pipeline和fs-extra包

const gltfPipeline = require('gltf-pipeline');
const fsExtra = require('fs-extra');
const glbToGlb = gltfPipeline.processGlb;
let dirs = fsExtra.readdirSync('./originModels')
let count = 0 , total = dirs.length
dirs.map(dir => {
    fsExtra.readFile(`./originModels/${dir}`).then(glb => {
        glbToGlb(glb, {
            dracoOptions: {
                compressionLevel: 10,
                compressMeshes : true
            },
            stats : true
        }).then(({glb}) => {
            fsExtra.writeFile(`./targetModels/${dir}`, glb).then(() => {
                count++
                console.log(`模型压缩${count}/${total}`)
                if(count == total) {
                    console.log('模型压缩完成')
                }
            })
        })
    })
})

目录如下,在该文件下面建立两个originModels和targetModels文件夹

模型压缩完成对比图

前端three.js库经行加载

虽然导出的也是glb模型,但直接使用gltfLoader经行加载会加载失败,必须经过DRACOLoader经行转换,在转换之前引入三个资源文件,都可以在github three.js官方库中下载

  • GLTFLoader.js      three.js\examples\jsm\loaders\GLTFLoader.js
  • DRACOLoader.js    three.js\examples\jsm\loaders\DRACOLoader.js
  • DRACOLoader解码库  three.js\examples\js\libs\draco\gltf
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader'
import { DRACOLoader  } from 'three/examples/jsm/loaders/DRACOLoader'
import {LoadingManager} from 'three'

const loader = new GLTFLoader(new LoadingManager());  //实时显示进度
DRACOLoader.setDecoderPath( 'three.js/examples/js/libs/draco/gltf/' );//设置解压库文件路径
const dracoLoader = new DRACOLoader();  //
dracoLoader.setDecoderConfig({type: 'js'})  //使用js方式解压
dracoLoader.preload()  //初始化_initDecoder 解码器
loader.setDRACOLoader(dracoLoader)   //gltfloader使用dracoLoader

let url = "models/yalj.glb"
loader.load(url, ({scene}) => {
    //处理加载过来的模型
} , xhr => {
    //处理加载的进度
}, error => {
    //加载错误时触发
})

错误处理

出现这样的错误 是没有正确配置解码器

dracoLoader.setDecoderConfig({type: 'js'})  //使用js方式解压
dracoLoader.preload()  //初始化_initDecoder 解码器

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43131842/article/details/118025968

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签