threejs+uniapp(app+h5)加载模型

复制可直接使用

1:由于app端获取不到dom,所以采用renderjs的写法实现。

     不懂的小伙伴移步:https://uniapp.dcloud.net.cn/tutorial/renderjs.html#renderjs

2:直接加载glb模型即可,由于gltf模型有两个文件,app端真机调试是找不到这个.bin文件的。

     模型转换请移步:https://threejs.org/editor/,新建空项目,同时导入gltf+bin文件,再导出glb

3:添加模型代码

    /**
	 * 添加模型
	 */
	async _setModel(modelName, callback) {
		let modelPath = `./static/gltf/${modelName}`;
		// #ifdef APP
		modelPath = await getfile(modelPath);
		// #endif
		return new Promise((resolve, reject) => {
			new GLTFLoader().load(
				modelPath,
				(gltf) => {
					callback && callback(gltf);
				},
				undefined,
				(error) => {
					console.error(error);
					reject(modelPath + "模型添加失败!");
				}
			);
			resolve(modelPath + "模型添加成功!");
		});
	}

    ...

    // 调用
    this._setModel('bridge.glb', (gltf) => {
		this.scene.add(gltf.scene);
	});

解释:app端真机调试直接加载模型是会报错的:URL scheme "file" is not supported

 Fetch API cannot load file:///storage/emulated/0/Android/data/io.dcloud.HBuilder/apps/HBuilder/www/static/gltf/bridge.glb. URL scheme "file" is not supported. at app-view.js:20430

4:使用 plus.io.convertLocalFileSystemURL 转换文件路径。也就是 "第三点" 中的getfile方法

export function getfile(e) {
	// #ifdef APP-PLUS
	let url = plus.io.convertLocalFileSystemURL(e)
	return new Promise((resolve, reject) => {
		plus.io.resolveLocalFileSystemURL(url, entry => {
			var reader = null;
			entry.file(file => {
				reader = new plus.io.FileReader();
				reader.onloadend = (read) => {
					resolve(read.target.result)
				};
				reader.readAsDataURL(file);
			}, function(error) {
				alert(error.message);
			});
		}, err => {
			reject(err)
		})
	})
	// #endif
	// #ifndef APP-PLUS
	return new Promise((resolve) => {
		resolve(e)
	})
	// #endif
}

注:由于公司没有小程序的需求,所以没测试小程序是否适配。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值