threejs加载file格式的gltf模型,使用input type=file加载gltf模型

news/2024/7/10 2:15:03 标签: vue, javascript, threejs, webgl

项目场景:

使用input选择gltf加载模型

问题描述

gltf有多个文件如何塞给GLTFLoader加载(不知道怎么办)。

解决方案:

最后在threejs官网看到解决办法
在这里插入图片描述

解决思路

URL.createObjectURL(bolb/file)

1:input输入文件获取

const uploadInput = ref<HTMLInputElement | undefined>();
const files: any = uploadInput.value!.files; // 获取files列表

2:查找gltf后缀的主文件,然后记录名称

  for (const val of files) {
        if (val.name.indexOf('.gltf') !== -1) {
          modelUrl.value = val.name // 保存名字
        }
        urls[val.name] = val;
      }

3:获取的files然后在threejs的LoadingManager管理器中加载----setURLModifier需要在加载之前设置

this.manager.setURLModifier((_url: string) => {
        let hasURL = "";
		
		// 这里查找前面的file然后转成地址,再return出去------有可能名称不是完全一样需要匹配
      	hasURL = URL.createObjectURL(_bolbURLs[f]);
        
        _url = hasURL || "";
        return _url;
      });

4:加载模型
设置setURLModifier之后直接加载就行

loader.load( '第二步记录的名称.gltf', (gltf) => {
	scene.add( gltf.scene );
	objectURLs.forEach( ( url ) => URL.revokeObjectURL( url ) ); // 销毁
});

就这么多

官方的范例:

// 将文件拖入网页时创建的Blob或File对象。
const blobs = {'fish.gltf': blob1, 'diffuse.png': blob2, 'normal.png': blob3};

const manager = new THREE.LoadingManager();

// 使用URL回调初始化加载管理器。
const objectURLs = [];
manager.setURLModifier( ( url ) => {

	url = URL.createObjectURL( blobs[ url ] );

	objectURLs.push( url );

	return url;

} );

// 像通常一样加载,然后撤消blob URL
const loader = new THREE.GLTFLoader( manager );
loader.load( 'fish.gltf', (gltf) => {

	scene.add( gltf.scene );

	objectURLs.forEach( ( url ) => URL.revokeObjectURL( url ) );

});

总结

有不对的地方欢迎大佬指出。


http://www.niftyadmin.cn/n/5013484.html

相关文章

C++信息学奥赛1181:整数奇偶排序

#include <bits/stdc.h> using namespace std; int main() {int n;cin >> n; // 输入一个整数nint arr[n]; // 定义一个长度为n的整型数组for (int i 0; i < n; i){cin >> arr[i]; // 输入数组元素}int a, max; // 定义变量a和maxmax a 0; // 初始化ma…

<图像处理> 空间滤波基础二

空间滤波基础二&#xff1a;锐化 锐化的作用的突出灰度中的过渡。图像锐化通过空间微分来实现&#xff0c;微分将增强边缘和其他不连续&#xff08;噪声&#xff09;&#xff0c;不强化灰度变化缓慢的区域。图像锐化也叫做高通滤波&#xff0c;通过高频&#xff0c;抑制低频。…

运维经验记录 在CentOS上挂载Windows共享磁盘

1、需求&#xff1a; 非root用户&#xff08;普通用户&#xff09;能够读写windows共享目录&#xff0c;比如查看文件、创建文件、修改文件、删除文件 # 让普通用户也可以正常读写 uidvalue and gidvalue Set the owner and group of the root of the file system (default: …

变量的赋值和更新

在Python中&#xff0c;变量的赋值和更新很简单。下面是一些示例代码&#xff1a; 变量的赋值&#xff1a; # 整数类型变量的赋值x 10# 字符串类型变量的赋值name "John"# 列表类型变量的赋值numbers [1, 2, 3, 4, 5] 变量的更新&#xff1a; # 更新整数类型变量的…

自动驾驶:轨迹预测综述

自动驾驶&#xff1a;轨迹预测综述 轨迹预测的定义轨迹预测的分类基于物理的方法&#xff08;Physics-based&#xff09;基于机器学习的方法&#xff08;Classic Machine Learning-based&#xff09;基于深度学习的方法&#xff08;Deep Learning-based&#xff09;基于强化学习…

代码随想录二刷day20

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣654. 最大二叉树二、力扣617. 合并二叉树三、力扣700. 二叉搜索树中的搜索四、力扣98. 验证二叉搜索树 前言 一、力扣654. 最大二叉树 /*** Definitio…

实战ResNet:CIFAR-10数据集分类

本节将使用ResNet实现CIFAR-10数据集的分类。 7.2.1 CIFAR-10数据集简介 CIFAR-10数据集共有60 000幅彩色图像&#xff0c;这些图像是3232像素的&#xff0c;分为10类&#xff0c;每类6 000幅图&#xff0c;如图7-9所示。这里面有50 000幅图用于训练&#xff0c;构成了5个训…

【python运维脚本实践】python实践篇之使用Python处理有序文件数据的多线程实例

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…