Babaylonjs能够将巴比伦,gltf,obj和文件加载到场景中。
如何通过html输入类型文件从文件选择对话框中选择文件,以及如何加载模型和图像的纹理?
注意:Babylonjs资产管理器和SceneLoader方法会处理来自服务器的所有http请求。他们不是我想要的。同样,http在远程服务器上发布文件,然后使用我提到的http请求并加载到场景中的babylonjs方法,在这里我不是要寻找的。 p>
答案 0 :(得分:0)
好吧,您尝试过吗?
const myFile = target.file[0]
中获取文件 const url = URL.createObjectURL(myFile);
BABYLON.SceneLoader.ImportMeshAsync(
"",
url,
"",
scene,
null,
fileExtension
);
它使您可以使用输入文件而不必精确地知道它在计算机中的位置,并根据请求使用巴比伦方法将其导入。
答案 1 :(得分:0)
我建议您检查支持从本地文件系统导入模型的BabylonJS沙箱的代码:https://sandbox.babylonjs.com/
在此示例中,您有两种将本地模型导入场景的方法:
查看BabylonJS沙箱(https://sandbox.babylonjs.com/index.js)中使用的脚本的268-291行代码:
filesInput = new BABYLON.FilesInput(engine, null, sceneLoaded, null, null, null, startProcessingFiles, null, sceneError);
filesInput.onProcessFileCallback = (function(file, name, extension) {
if (filesInput._filesToLoad && filesInput._filesToLoad.length === 1 && extension) {
if (extension.toLowerCase() === "dds" || extension.toLowerCase() === "env") {
BABYLON.FilesInput.FilesToLoad[name] = file;
skyboxPath = "file:" + file.correctName;
return false;
}
}
return true;
}).bind(this);
filesInput.monitorElementForDragNDrop(canvas);
htmlInput.addEventListener('change', function(event) {
// Handling data transfer via drag'n'drop
if (event && event.dataTransfer && event.dataTransfer.files) {
filesToLoad = event.dataTransfer.files;
}
// Handling files from input files
if (event && event.target && event.target.files) {
filesToLoad = event.target.files;
}
filesInput.loadFiles(event);
}, false);
如您所见,使用了一个BabylonJS类FilesInput。有关FilesInput类的更多信息:https://doc.babylonjs.com/api/classes/babylon.filesinput