You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
The text was updated successfully, but these errors were encountered:
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
thanks for your help.
The text was updated successfully, but these errors were encountered: