在BabylonJS中加载glTF-Transform处理的Draco压缩网格报错
BabylonJS加载动态Draco压缩GLB Blob文件的问题
- 需求场景:加载通过REST请求动态获取、经glTF-Transform服务端处理的Draco压缩网格,该网格以内存Blob形式存在。由于
URL.createObjectURL生成的URL无法指定扩展名,直接调用SceneLoader.ImportMeshAsync导入会报错:
createModelRenderable.ts:520 Error during loading meshes, try again RuntimeError: Unable to load from blob:http://127.0.0.1:5173/b3b55baa-4ede-41fd-a66e-304460969a7f: importMesh of undefined from undefined version: undefined, exporter version: undefinedimportMesh has failed JSON parse at A (sceneLoader.js:343:46) at Object.importMesh (babylonFileLoader.js:797:17) at sceneLoader.js:382:35 at A (sceneLoader.js:182:13) at fileTools.js:375:9 at XMLHttpRequest.A (fileTools.js:489:33)
注:此情况下普通.glb文件也无法加载
- 为解决扩展名问题,将
ImportMeshAsync的pluginExtension参数指定为.glb后,普通GLB可正常加载,但Draco压缩网格仍加载失败,报错:
createModelRenderable.ts:519 Error during loading meshes, try again RuntimeError: Unable to load from blob:http://127.0.0.1:5173/07f9e64c-2c58-4c64-81c0-54f7d3bbb586: (this.dracoCompression || E8.Default)._decodeMeshToGeometryForGltfAsync is not a function at A (sceneLoader.js:343:46) at sceneLoader.js:397:21
- 已确认
KHR_draco_mesh_compression扩展加载正常(重复添加会提示已存在),Draco配置指向有效CDN:
wasmUrl: "https://preview.babylonjs.com/draco_wasm_wrapper_gltf.js" wasmBinaryUrl: "https://preview.babylonjs.com/draco_decoder_gltf.wasm" fallbackUrl: "https://preview.babylonjs.com/draco_decoder_gltf.js"
解码器WASM已正常下载,尝试使用本地文件也无效果;且该Draco压缩GLB文件可在Babylon沙箱正常加载。
- 尝试手动加载文件后解码,代码如下:
const loadFileAsync = function (url) { return new Promise(function (resolve, reject) { LoadFile( url, function (data) { resolve(data); }, undefined, undefined, true, function (_request, exception) { reject(exception); } ); }); };
调用new DracoCompression().decodeMeshAsync()解码时,得到错误提示:Not a Draco file.
- 目前BabylonJS论坛已有用户遇到相同问题,暂无可行解决方案。
内容的提问来源于stack exchange,提问作者Alessandro Muzzi
相关产品推荐
相关产品推荐

