Three.js 实现导出模型文件(.glb,.gltf)功能 GLTFExporter

news2025/1/10 23:04:58

Three.js提供了导出(.glb,.gltf)文件的API GLTFExporter 用于实现场景内容导出模型文件的功能

导出模型文件主要使用 parse 方法,该方法接收三个参数:

1.scene:要导出的场景对象。
2.onComplete:解析完成后的回调函数,接收一个参数 result,表示解析后的 glTF 数据。
3.options:可选参数,用于配置导出的选项。

下面是options的一些常用参数选项:

1.binary:布尔值,指定是否将 glTF 导出为二进制格式。默认为 false。
2.truncationDecimalDigits:整数值,指定在导出过程中截断浮点数的小数位数。默认为 null,表示不截断。
3.forceIndices:布尔值,指定是否强制导出索引。默认为 false。
4.forcePowerOfTwoTextures:布尔值,指定是否强制将纹理的尺寸调整为 2 的幂次方。默认为 false。
5.onlyVisible:布尔值,指定是否只导出可见的对象。默认为 false。
6.onlySelected:布尔值,指定是否只导出选中的对象。默认为 false。
7.embedImages:布尔值,指定是否将纹理嵌入到 glTF 文件中。默认为 false。
8.animations:数组 导出动画的剪辑列表 。默认为 []
9.trs: 布尔值, 是否保留位置、旋转、缩放信息 。默认为 false

GLTFExporter 还提供了其他一些方法和属性,用于处理 glTF 数据的导出过程。下面是一些常用的方法和属性:

parse:将场景对象解析为 glTF 数据。
parseNode:解析场景中的节点。
parseMesh:解析场景中的网格。
parseCamera:解析场景中的相机。
parseLight:解析场景中的灯光。
parseMaterial:解析场景中的材质。
parseTexture:解析场景中的纹理。
parseAnimation:解析场景中的动画。
parseSkin:解析场景中的皮肤。
parseAccessor:解析场景中的访问器。
parseBuffer:解析场景中的缓冲区。
parseBufferView:解析场景中的缓冲区视图。
parseImage:解析场景中的图像。
parseSampler:解析场景中的采样器。
parseScene:解析场景。
parseScenes:解析场景列表。
parseAnimations:解析动画列表。
parseMaterials:解析材质列表。
parseTextures:解析纹理列表。
parseImages:解析图像列表。
parseSamplers:解析采样器列表。
parseAccessors:解析访问器列表。
parseBuffers:解析缓冲区列表。
parseBufferViews:解析缓冲区视图列表。
parseSkins:解析皮肤列表。

在上一篇 Three.js加载外部glb,fbx,gltf,obj 模型文件 的文章基础上新增一个 onExporterModel(导出模型方法)
引入导出API GLTFExporter

import { GLTFExporter } from 'three/examples/jsm/exporters/GLTFExporter.js'
	// 导出模型
	onExporterModel(type) {
		const exporter = new GLTFExporter();
		const options = {
	        trs: true,      // 是否保留位置、旋转、缩放信息
			animations: this.modelAnimation, // 导出的动画
			binary: type == 'glb' ? true : false,  // 是否以二进制格式输出
			embedImages: true,//是否嵌入贴图
			onlyVisible: true, //是否只导出可见物体
			forcePowerOfTwoTextures: true,
			includeCustomMaterials: true, //指定是否包含自定义材质
			includeCustomAttributes: true, //	指定是否包含自定义属性
			includeCustomTextures: true, //	指定是否包含自定义纹理
			includeCustomSamplers: true, //	指定是否包含自定义采样器
			includeCustomImages: true, //	指定是否包含自定义图像
			includeCustomTechniques: true, //	指定是否包含自定义技术
			includeCustomMaterialsCommon: true, //指定是否包含自定义 MaterialsCommon
			includeCustomMeshes: true,//指定是否包含自定义网格
			includeCustomSkins: true, //指定是否包含自定义皮肤
			includeCustomNodes: true, // 指定是否包含自定义节点
			includeCustomGeometries: true, //指定是否包含自定义几何体
			includeCustomPrograms: true, // 指定是否包含自定义程序
			includeCustomShaders: true, //指定是否包含自定义着色器
			includeCustomExtensions: true, //指定是否包含自定义扩展。如果设置为true,则会包含在导出中定义的自定义GLTF扩展
		}
		exporter.parse(this.scene, function (result) {
			console.log(result)
			if (result instanceof ArrayBuffer) {
				// 将结果保存为GLB二进制文件
				saveArrayBuffer(result, `${new Date().toLocaleString()}.glb`);
·			} else {
				// 将结果保存为GLTF JSON文件
				saveString(JSON.stringify(result), `${new Date().toLocaleString()}.gltf`);
			}
			function saveArrayBuffer(buffer, filename) {
				// 将二进制数据保存为文件
				const blob = new Blob([buffer], { type: 'application/octet-stream' });
				const url = URL.createObjectURL(blob);
				const link = document.createElement('a');
				link.href = url;
				link.download = filename;
				link.click();
				URL.revokeObjectURL(url);
				ElMessage.success('导出成功')
			}
			function saveString(text, filename) {
				// 将字符串数据保存为文件
				const blob = new Blob([text], { type: 'application/json' });
				const url = URL.createObjectURL(blob);
				const link = document.createElement('a');
				link.href = url;
				link.download = filename;
				link.click();
				URL.revokeObjectURL(url);
				ElMessage.success('导出成功')
			}
		}, (err) => {
			ElMessage.error(err)
		}, options);
	}

完整的代码可参考:https://gitee.com/ZHANG_6666/Three.js3D

界面效果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1030682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Deformable DETR(2020 ICLR)

Deformable DETR(2020 ICLR) detr训练epochs缩小十倍,小目标性能更好 Deformable attention 结合变形卷积的稀疏空间采样和Transformer的关系建模能力 使用多层级特征层特征,不需要使用FPN的设计(直接使用backbone多层级输出&a…

cgroup version jdk version k8s

bug info: in centos, linux 3.10, cgroup:v1, service works well. in ubuntu 22.04 LTS, linux 5, systemd:v2, service is always crash on boot, or running some minutes then killed by OOM. deploy.yaml文件相关内容: specify limits:memory 1000M in yaml, killed …

区域气象-大气化学在线耦合模式(WRFChem)在大气环境领域实践技术应用

随着我国经济快速发展,我国面临着日益严重的大气污染问题。近年来,严重的大气污染问题已经明显影响国计民生,引起政府、学界和人们越来越多的关注。大气污染是工农业生产、生活、交通、城市化等方面人为活动的综合结果,同时气象因…

Redis缓存相关问题

目录 缓存穿透 缓存雪崩 缓存击穿 Redis集群方案 主从复制Replication 哨兵sentinel 高可用介绍 Redis sentinel介绍 Redis sentinel使用 配置sentinel 启动sentinel 测试sentinel Redis内置集群cluster Redis cluster介绍 哈希槽方式分配数据 Redis cluster的…

ubuntu18.04 编译edk2项目下的intel架构bios

看了国内的edk2编译文章. 大不部分都是编译 用于虚拟机(qemu)或者模拟器上运行的 很少有编译edk2项目 出 真机的 bios 希望本文章对你有帮助, 请注意 github,com因为被墙了. 所有需要用gitee代替 参考来源 https://gitee.com/binout/edk2-platforms/tree/master https:/…

PHP8的类与对象的基本操作之类常量-PHP8知识详解

php 8引入了一种新的特性,称为类常量(class Constants)。类常量是在类中定义的常量,类似于全局常量,但作用域仅限于定义它们的类。 在PHP 8中,类常量的作用域被限制在定义它们的类中。这意味着只有类的成员…

【配电变电站的最佳位置和容量】基于遗传算法的最优配电变电站放置(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

uploadifive上传工具php版使用

uploadifive自带的DEMO文件。 下载地址&#xff1a; http://www.uploadify.com/download/ <!DOCTYPE HTML> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"> <title>UploadiFive Test&…

C4BUILDER—用于构建C4模型图的Web项目

c4builder是什么&#xff1f; c4builder&#xff1a; 字面理解是产生C4架构图的构建器。 c4builder是一个轻量级的nodejscli工具&#xff0c;用于仅使用文本构建、维护和共享软件体系结构项目。 c4builder是一种架构设计工具&#xff0c;可以帮助开发人员和架构师描述和可视化…

结合购物车功能,了解RedisTemplate中的BoundHashOperations源码

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;CSDN实力新星&#xff0c;后端开发两年经验&#xff0c;曾担任甲方技术代表&#xff0c;业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开…

零代码编程:用ChatGPT批量删除文件名称中的部分内容

要批量删除文件名称中的某些特定字符&#xff0c;可以在ChatGPT中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个文件重命名的任务。具体步骤如下&#xff1a; 本地电脑&#xff1a;E:\peppa4 文件夹下有很多mp4文件&#xff0c;比如Peppa Pig Season…

轮换对称性

二重积分 普通对称性–D关于 y x yx yx对称&#xff1a; ∬ D f ( x , y ) d σ { 2 ∬ D 1 f ( x , y ) d σ f ( x , y ) f ( y , x ) 0 f ( x , y ) − f ( y , x ) \iint_{D}f(x,y)d\sigma\begin{cases} 2\iint_{D_1}f(x,y)d\sigma\ \ \ \ \ \ f(x,y)f(y,x) \\ 0 \ \…

每天几道Java面试题:IO流(第五天)

目录 第五幕 、第一场&#xff09;街边 友情提醒 背面试题很枯燥&#xff0c;加入一些戏剧场景故事人物来加深记忆。PS:点击文章目录可直接跳转到文章指定位置。 第五幕 、 第一场&#xff09;街边 【衣衫褴褛老者&#xff0c;保洁阿姨&#xff0c;面试者老王】 衣衫褴褛老…

ATFX汇市:美联储宣布维持利率不变,鲍威尔继续发表鹰派言论

ATFX汇市&#xff1a;今日凌晨02:00&#xff0c;美联储公布9月利率决议结果&#xff0c;宣布维持5.25%5.5%的联邦基金利率区间不变。2:002:05&#xff0c;美元指数从最低104.75飙涨至最高105.21&#xff0c;对应EURUSD的汇率从最高1.0727下跌至最低1.0674&#xff0c;跌幅53基点…

如何将 Transformer 应用于时间序列模型

在机器学习的广阔前景中&#xff0c;transformers 就像建筑奇迹一样高高耸立&#xff0c;以其复杂的设计和捕获复杂关系的能力重塑了我们处理和理解大量数据的方式。 自 2017 年创建第一个 Transformer 以来&#xff0c;Transformer 类型呈爆炸式增长&#xff0c;其中包括 Chat…

VS|vs2017跨平台编译linuxC++ConsoleQtGUI

未完成 待更新 文章目录 首先安装vs时要勾选上使用C的Linux开发使用Vs2017创建跨平台C Console项目配置Vs的SSH连接 Debug >> Option >> Cross Plaform文件加入到Linux项目&#xff0c;使用Windows下的文件即可。将所有项目包含.CPP、.h文件包含进Linux项目设置项…

案例丨如何提升可视化分析能力?听听这两家企业怎么说

神策分析 2.5 版本正式发布经营分析能力以来&#xff0c;已有不少客户接入使用&#xff0c;并充分实现了可视化分析能力的提升。 本文将为大家分享两家客户的真实反馈&#xff0c;希望能够帮助您进一步了解神策经营分析的能力。 案例一&#xff1a;神策数据助力美篇打造公司级“…

Linux学习之gdb的使用

目录 1.Debug与Release模式 如何证明debug是可以被调试的&#xff1f; 2.Linux调试器-gdb使用 gdb调试的指令 指令一&#xff1a;list&#xff08;l&#xff09; 查看源代码 编辑 ​编辑 命令二&#xff1a;run&#xff08;r&#xff09;运行程序 命令三&#xff…

mall电商项目(学习记录1)

1.简介 mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。后台管理系统包含商品管理、订单管…

基于movie lens-100k数据集的协同过滤算法实现

基于movie lens-100k数据集的协同过滤算法实现 数据集处理 基于用户的协同过滤算法的实现 基于物品的协同过滤算法的实现 数据集处理 import pandas as pdu_data pd.read_csv(D:/PyCharmWorkSpace/ml-100k/ml-100k/u.data) u_genre pd.read_csv(D:/PyCharmWorkSpace/ml-10…