I am trying the following tutorial, but I am getting an error with ImportMeshAsync.
I am trying with local node/typescript and the Babylon.js version is v8.2.1.
The package import does not seem to be working, but the solution is not clear.
We would be grateful if you could help me.
Error Message
RuntimeError: Unable to load from https://assets.babylonjs.com/meshes/valleyvillage.glb: importMesh of undefined from undefined version: undefined, exporter version: undefinedimportMesh has failed JSON parse
at t3 [as constructor] (error.ts:7:1)
at new t3 (error.ts:76:14)
at p2 (sceneLoader.ts:888:42)
at Object.importMesh (babylonFileLoader.ts:937:17)
at _2 (sceneLoader.ts:935:35)
at f3 (sceneLoader.ts:676:13)
at fileTools.ts:527:13
at XMLHttpRequest.e4 (fileTools.ts:682:37)
pacakge.json
{
"name": "babylon-trial",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"preview": "vite preview"
},
"devDependencies": {
"@types/earcut": "^3.0.0",
"typescript": "~5.7.2",
"vite": "^6.2.0"
},
"dependencies": {
"@babylonjs/core": "^8.2.2",
"@babylonjs/loaders": "^8.2.2",
"babylonjs": "^8.2.1",
"earcut": "^3.0.1"
}
}
Code
import "babylonjs";
// import earcut from 'earcut';
// (window as any).earcut = earcut;
import { registerBuiltInLoaders } from "@babylonjs/loaders/dynamic";
registerBuiltInLoaders();
// Viewer / Engine / Scene / Camera / Light
const canvas = document.getElementById("renderCanvas") as HTMLCanvasElement;
const engine = new BABYLON.Engine(canvas, true);
const scene = new BABYLON.Scene(engine);
const camera = new BABYLON.ArcRotateCamera("camera", -Math.PI / 2, Math.PI / 2.5, 200, new BABYLON.Vector3(0, 1, 0), scene);
camera.attachControl(canvas, true);
const light = new BABYLON.HemisphericLight("light", new BABYLON.Vector3(4, 1, 0), scene);
// import 3d model
BABYLON.ImportMeshAsync(
"https://assets.babylonjs.com/meshes/valleyvillage.glb",
scene
).then((result) => {
// success
}).catch((error) => {
// faild
console.error(error);
});
// main render loop
engine.runRenderLoop(() => {
scene.render();
});
// resize
window.addEventListener("resize", () => {
engine.resize();
});