Orillusion / orillusion

Orillusion is a pure Web3D rendering engine which is fully developed based on the WebGPU standard.
https://www.orillusion.com
MIT License
4.7k stars 614 forks source link

[FR]: 提供一个arrayBuffer的模型加载方法(或base64)类似BABYLONJS这种 #229

Closed GGBond-GIS closed 1 year ago

GGBond-GIS commented 1 year ago
let arrayBuffer ;
let base64 ;
let file = new File([arrayBuffer], 'any.glb');

BABYLON.SceneLoader.Append("", base64, scene,  ()=> {});

BABYLON.SceneLoader.Append("file:,", file, scene,  ()=> { });
lslzl3000 commented 1 year ago

这个的作用是? 有没有 babylon 相关doc介绍?

lslzl3000 commented 1 year ago

你的意思是想直接加载基于 二进制 arraybuffer 或者 base64 编码的模型文件吗?

这种可以直接利用原生 web api 转 blob/file 再转 url 进行加载,比如

let file = new File([arraybuffer], 'name.glb') 
// or
let file = new Blob([arraybuffer], {type: 'application/octet-stream'})

let url = URL.createObjectURL(file) // 生成一个临时的url
let model = await Engine3D.res.loadGltf(url)

对于 base64 ,也是可以先把 base64 转成 blob 再转 临时url,base64 转 blob 的方法很多,最简单的是利用 web 原生 fetch 直接加载 base64 即可,e.g:

let res = await fetch(`data:application/octet-stream;base64,${base64}`);
let blob = await res.blob();
let url = URL.createObjectURL(blob) // 生成一个临时的url
let model = await Engine3D.res.loadGltf(url)

以上两种方式都是通用的,对于图片或其他类型文件也是一样的,都可以统一转 Blob 再转 url 进行加载

lslzl3000 commented 1 year ago

目前来说,我们觉得没有必要过度包装 web 自带的 api,这个 issue 可以保持 open 一段时间,如果大家觉得有必要把这两种转换默认加入到 loadGltf 中,我们后面再把它加进去