Step 2. Scene initialization
Prerequisites
You need to have an authorization code first. To obtain the authorization code, please refer to Authorization Application.
Resource acquisition
The pictures, models, third-party libraries, source code and other resources involved in the scene can be obtained by click to download.
Steps
1. Create Map.vue file
Delete all files in the src->components directory and create a new vue file named Map.
Add basic template code in this file.
<!-- The main method of defining components -->
<script setup>
//Import onMounted life cycle hook
import { onMounted } from 'vue';
//Call the onMounted hook and execute this function when the component is mounted.
onMounted(() => {});
</script>
<!-- Define the template part of the component -->
<template></template>
<!-- Define the style of the component. The scoped attribute ensures that the style only applies to the current component -->
<style scoped></style>
For more information about lifecycle hooks, please visit Vue official documentation.
2. Initialize the map
Add map initialization code in the Map.vue file.
<!-- The main method of defining components -->
<script setup>
//Import onMounted life cycle hook
import { onMounted } from 'vue';
//Define style file
const style = {
version: 8,
sources: {},
layers: [ // Create a solid color background layer
{
id: 'background',
type: 'background',
paint: { 'background-color': 'rgba(9, 30, 55, 0.6)' },
},
],
};
//Call the onMounted hook and execute this function when the component is mounted.
onMounted(() => {
// Map initialization
let map = new mapmost.Map({
container: 'map-container', // map container id
style: style, // map style
center: [120.72929672369003, 31.288619767132104], // Map center point
zoom: 17.88998700147244, // Map zoom level
pitch: 64.42598133276567, // Map pitch angle
bearing: -37.87271910936988, // Map azimuth
doubleClickZoom: false, // Turn off double-click zoom map
userId: '***', // Please enter the authorization code you obtained
});
/*
* Assign the map object to the map property of the window object,
* This allows the map object to be accessed globally through window.map.
*/
window.map = map;
})
</script>
<!-- Define the template part of the component -->
<template>
<!-- Map container -->
<div class="map-container" id="map-container"></div>
</template>
<!-- Define the style of the component. The scoped attribute ensures that the style only applies to the current component -->
<style scoped>
/* Map container style */
.map-container {
position: absolute;
top: 0;
bottom: 0;
width: 100%;
height: 100%;
overflow: hidden;
}
</style>notesFor more information about map initialization, visit Map.
Modify the src->App.vue file, the code is as follows:
<script setup>
//Import components
import Map from './components/Map.vue'
</script>
<template>
<div class="container">
<!-- Use components and render them into the page -->
<Map></Map>
</div>
</template>
<style scoped>
.container {
width: 100%;
height: 100%;
overflow: hidden;
}
</style>Modify the src->assets->main.css file and set global styles.
* {
margin: 0;
padding: 0;
}
html,
body {
width: 100%;
height: 100%;
overflow: hidden;
}
#app {
width: 100%;
height: 100%;
overflow: hidden;
}Run and check the effect. At this time, only one background layer can be seen in the scene.
npm run dev
3. Set the scene environment
Set the 3D base environment in map initialization.
// Map initialization
let map = new mapmost.Map({
container: 'map-container',
style: style,
center: [120.72929672369003, 31.288619767132104],
zoom: 17.88998700147244,
pitch: 64.42598133276567,
bearing: -37.87271910936988,
doubleClickZoom: false,
userId: '***', // Please enter the authorization code you obtained
env3D: {
defaultLights: false, // Turn off default lights
envMap: './assets/hdr/yun(17).hdr', // Set environment map, support hdr format
exposure: 2.64, //Set scene exposure
},
});Set scene lighting.
Create a new api folder in the src folder.
Create a new SceneApi.js file in the api folder.
Add the scene lighting code in the SceneApi.js file.
// This class is mainly used to set the scene environment
class SceneApi {
constructor(map) {
this._map = map;
this.initLight(); // Call the initialization light method
}
//Initialize lights
initLight() {
//Create and set up the first directional light source
let light1 = new mapmost.DirectionalLight({
color: '#484b4b', // light color
intensity: 3.7, // light intensity
position: [291218.1880671615, -359034.8940693505, 220067.97081694918], // Light position
});
//Create and set up a second directional light source
let light2 = new mapmost.DirectionalLight({
color: '#767676', // Light color
intensity: 0.91, // light intensity
position: [-291218.1880671615, 359034.8940693505, 220067.97081694918], // Light position
});
//Add lights to the scene
this._map.addLight(light1);
this._map.addLight(light2);
}
}
// Export the SceneApi class so that it can be used in other modules
export default SceneApi;
For more information about lights, visit Lights.
Set scene sky.
- Add scene sky code in SceneApi.js file.
```js
// This class is mainly used to set the scene environment
class SceneApi {
constructor(map) {
this._map = map;
this.initLight();
// highlight-start
this.initSky(); // Call the initialization sky method
// highlight-end
}
// highlight-start
//Initialize the skybox
initSky() {
this._map.addLayer({
id: 'sky',
type: 'mapmost_sky',
enableCloud: true,
paint: {
// Skybox texture path
'sky-url': './assets/images/CubeRT_Capture_Tex_2048.png',
//Skybox rotation angle
'sky-angle': 0,
// sky exposure
'sky-exposure': 1,
// sky opacity
'sky-opacity':1,
'sky-type': 'atmosphere',
// sun position
'sky-atmosphere-sun': [227.02725700614292, 110.95561210040023],
// Sun intensity
'sky-atmosphere-sun-intensity': 5,
},
});
}
// highlight-end
}
// Export the SceneApi class so that it can be used in other modules
export default SceneApi;
```-Introduce the SceneApi class into the Map.vue file
import SceneApi from '../api/SceneApi';Called in onMounted
window.map = map;
// Called when the map is loaded
map.on('load',()=>{
new SceneApi(map);
})
-Run and check the effect. Now you can see a background layer and sky in the scene.
npm run dev

4. Add model
Add model in map’s load event.
It should be noted that the scene we provide is a large model without splitting, including buildings, roads, trees, street lights, etc.
let modelLayer; // Define the three-dimensional layer
map.on('load', () => {
new SceneApi(map);
//Set model resources
let models_obj = [
{
type: 'glb',
url: './assets/models/yq.mm', //Model file path
// Because the model we provide is encrypted, you need to set this parameter. If you are loading your own model, you do not need to set it.
decryptWasm:'https://delivery.mapmost.com/cdn/b3dm_codec/0.0.2-alpha/sdk_b3dm_codec_wasm_bg_opt.wasm',
},
];
//Set layer parameters
let options = {
id: 'model_id', // Set layer id
models: models_obj, // Set model resources
outline: true, // Allow outline highlighting
type: 'model', // Set layer type
center: [120.73014920373011, 31.287414975761724, 0.1], // Set the model center point
callback: function (group, layer) { // Model callback function
modelLayer = layer;
},
};
//Add the model to the map
map.addLayer(options);
})
For more information about models, visit Add Model.
5. Check the effect
Run and check the effect. The park model can be seen in the scene.
npm run dev