Hi , I am trying to load a 3d model to azure maps in Blazor .net9 webassembly , I can load the maps ok , but I cannot get to load the 3 model, I am following this example https://github.com/Azure-Samples/AzureMapsCodeSamples/blob/main/Samples/3D-layer/three.js/three.js.html , but i am having problem converting the html code to blazer , I have created a map.js script that load the map fine but I dont how to create the render and add the layer to the map. is there a blazor example available or can someone explain to me how to write a new script , sorry I am c# developer but never used JS before . this the current script but i have an error on the loader: new GLTFLoader(), ReferenceError: GLTFLoader is not defined ``` //script map.js var map, layer; // 3D model to render var modelDetails = { url: "/3d-layer/three.js/parrot.glb", origin: [-122.128929, 47.644042], mercatorOrigin: atlas.data.MercatorPoint.fromPosition([-122.128929, 47.644042]), rotateX: Math.PI / 2, rotateY: 0, rotateZ: 0, scale: 1e-7, animate: true }; // Create a renderer that implements atlas.WebGLRenderer var renderer = { renderingMode: "3d", loader: new GLTFLoader(), modelDetails: modelDetails, // Method called when the layer is added to the map onAdd: function (map, gl) { this.map = map; this.camera = new THREE.Camera(); this.scene = new THREE.Scene(); this.clock = new THREE.Clock(); // Create lights to illuminate the model var directionalLight = new THREE.DirectionalLight(0xffffff); directionalLight.position.set(0, 70, 100).normalize(); this.scene.add(directionalLight); var ambientLight = new THREE.AmbientLight(0x808080); this.scene.add(ambientLight); // Load the model this.loadModel(); // Use the Azure Maps map canvas for three.js this.renderer = new THREE.WebGLRenderer({ canvas: map.getCanvas(), context: gl }); this.renderer.autoClear = false; }, // Method called on each animation frame render: function (gl, matrix) { var md = this.modelDetails; if (md) { var rotationX = new THREE.Matrix4().makeRotationAxis(new THREE.Vector3(1, 0, 0), md.rotateX); var rotationY = new THREE.Matrix4().makeRotationAxis(new THREE.Vector3(0, 1, 0), md.rotateY); var rotationZ = new THREE.Matrix4().makeRotationAxis(new THREE.Vector3(0, 0, 1), md.rotateZ); var m = new THREE.Matrix4().fromArray(matrix); var l = new THREE.Matrix4() .makeTranslation(md.mercatorOrigin[0], md.mercatorOrigin[1], md.mercatorOrigin[2]) .scale(new THREE.Vector3(md.scale, -md.scale, md.scale)) .multiply(rotationX) .multiply(rotationY) .multiply(rotationZ); this.camera.projectionMatrix.elements = matrix; this.camera.projectionMatrix = m.multiply(l); this.renderer.resetState(); this.renderer.render(this.scene, this.camera); this.renderer.resetState(); } map.triggerRepaint(); }, loadModel: function () { var md = this.modelDetails; this.mixer = null; if (md) { // Use the three.js GLTF loader to add the 3D model to the three.js scene this.loader.load( md.url, function (gltf) { this.gltfModelScene = gltf.scene; this.scene.add(gltf.scene); if (md.animate) { this.mixer = new THREE.AnimationMixer(gltf.scene); var action = this.mixer.clipAction(gltf.animations[0]); action.play(); this.animate(); } }.bind(this) ); this.map.setCamera({ center: md.origin }); } }, animate: function () { if (this.mixer) { this.mixer.update(this.clock.getDelta()); this.renderer.render(this.scene, this.camera); requestAnimationFrame(() => { this.animate(); }); } } }; window.AzureMap = { map: null, layer: null, LoadMap: function (subKey, lat, long) { this.map = new atlas.Map("mapContainer", { authOptions: { authType: 'subscriptionKey', subscriptionKey: subKey }, view: "Auto", center: [long, lat], zoom: 17.5 }); map.events.add("ready", function () { // Create a WebGL layer layer = new atlas.layer.WebGLLayer("3d-model", { renderer }); // Add the layer to the map map.layers.add(layer); // Add controls map.controls.add( [ new atlas.control.ZoomControl(), new atlas.control.PitchControl(), new atlas.control.CompassControl(), new atlas.control.StyleControl({ mapStyles: "all" }) ], { position: "top-right" } ); }); } } ``` thanks for your help.