老哥能发一下模型吗,现在毕设急需,顺便能教一下怎么用吗,无模型的demo已经能成功运行,毕设是做自己飞的osgb模型,想要把自己模型放进去,谢谢老哥了
该回答引用于ChatGPT:
Vue3Cesium 是一个基于 Vue3 和 CesiumJS 的 3D 地球可视化组件库,可以用于在 Vue 应用中集成 3D 地球应用程序。下面提供一个简单的 Vue3Cesium 分户图 demo 示例,并给出如何使用 Vue3Cesium 加载模型的方法。
npm install vue-cesium@next --save
在 main.js
中引入:
import Vue from 'vue'
import VueCesium from 'vue-cesium'
Vue.use(VueCesium)
在 .vue
文件中创建一个 Vue3Cesium 组件,并在其中使用 Cesium Viewer 组件显示一个分户图。代码如下:
<template>
<div class="viewer">
<VueCesium>
<CesiumViewer :info="viewerOptions">
<CesiumImageryLayer :info="imageryLayers"></CesiumImageryLayer>
<CesiumTerrainProvider :info="terrainProvider" />
<Cesium3DTileset :info="tilesetOptions"></Cesium3DTileset>
</CesiumViewer>
</VueCesium>
</div>
</template>
<script>
export default {
name: 'Viewer',
data() {
return {
viewerOptions: {
animation: false,
baseLayerPicker: false,
fullscreenButton: false,
geocoder: false,
homeButton: false,
infoBox: false,
sceneModePicker: false,
selectionIndicator: true,
timeline: false,
navigationHelpButton: false,
},
imageryLayers: {
url: '/assets/img/baseTiles/World_Imagery/MapServer',
},
terrainProvider: {
url: 'https://assets.agi.com/stk-terrain/v1/tilesets/world/tiles',
},
tilesetOptions: {
url: 'http://localhost:8000/tileset.json',
},
};
},
};
</script>
<style lang="scss" scoped>
.viewer {
height: 100vh;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
}
</style>
在上述代码中 tilesetOptions
对象中的 url
属性指定了模型的 URL 地址,只需将 URL 修改成自己模型所在的路径即可加载模型。
在加载模型时还可以使用 maximumScreenSpaceError
和 maximumMemoryUsage
等属性来控制模型加载的细节。例如,下面代码在加载模型时设置了最大屏幕空间误差为 16,并且限制了模型最大内存使用量为 512MB:
tilesetOptions: {
url: 'http://localhost:8000/tileset.json',
maximumScreenSpaceError: 16,
maximumMemoryUsage: 512,
},
如果还有其它问题,建议参考 Vue3Cesium 官方文档:https://vuecesium.github.io/vue-cesium/v3/components/%E3%80%82
该回答引用ChatGPTbash
npm install vue@next
html
Vue3 Cesium Demo
<script src="https://unpkg.com/vue@next"></script>
{{ message }}
<script src="main.js"></script>
bash
npm install cesium
javascript
import Vue from 'vue';
import Cesium from 'cesium/Cesium';
Vue.config.productionTip = false;
new Vue({
el: '#app',
data() {
return {
message: 'Hello Vue and Cesium!',
viewer: null
}
},
// 挂载在 Vue 实例的 `mounted` 生命周期钩子中
mounted() {
this.viewer = new Cesium.Viewer('cesiumContainer');
}
});
javascript
mounted() {
this.viewer = new Cesium.Viewer('cesiumContainer');
const position = Cesium.Cartesian3.fromDegrees(-100, 40, 1000);
const heading = Cesium.Math.toRadians(135);
const pitch = 0;
const roll = 0;
const hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll);
const orientation = Cesium.Transforms.headingPitchRollQuaternion(position, hpr);
const entity = this.viewer.entities.add({
name: '模型示例',
position: position,
orientation: orientation,
model: {
uri: 'https://models.cesium.com/ball.glb',
scale: 200.0
}
});
this.viewer.trackedEntity = entity;
}
javascript
mounted() {
this.viewer = new Cesium.Viewer('cesiumContainer');
const position = Cesium.Cartesian3.fromDegrees(-100, 40, 1000);
const heading = Cesium.Math.toRadians(135);
const pitch = 0;
const roll = 0;
const hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll);
const orientation = Cesium.Transforms.headingPitchRollQuaternion(position, hpr);
const entity = this.viewer.entities.add({
name: '模型示例',
position: position,
orientation: orientation,
model: {
uri: 'https://models.cesium.com/ball.glb',
scale: 200.0
}
});
this.viewer.trackedEntity = entity;
const zone = Cesium.createTileMapServiceImageryProvider({
url: 'http://www.test.polygons/tileset.json'
});
this.viewer.imageryLayers.addImageryProvider(zone);
}
npm install cesium vue-cesium
// import the vue-cesium and cesium
import * as Cesium from 'cesium/Cesium.js'
import VueCesium from 'vue-cesium'
ref="cesiumRef"
@ready="onReady"
:viewerOptions="viewerOptions"
:terrainOptions="terrainOptions"
:imageryProviderOptions="imageryProviderOptions"
>
let model = Cesium.Model.fromGltf({
url: './path/to/model.gltf',
show: true,
allowPicking: true,
})
model.position = Cesium.Cartesian3.fromDegrees(lng, lat, height)
model.scale = scale
model.direction = Cesium.Cartesian3.UNIT_Z
let modelEntity = viewer.scene.primitives.add(model)
ref="cesiumRef"
@ready="onReady"
:viewerOptions="viewerOptions"
:terrainOptions="terrainOptions"
:imageryProviderOptions="imageryProviderOptions"
>
<script>
import * as Cesium from 'cesium/Cesium.js'
import VueCesium from 'vue-cesium'
export default {
name: 'Demo',
components: {
VueCesium,
},
data() {
return {
viewerOptions: {
animation: false,
timeline: false,
},
terrainOptions: {
url: 'https://assets.agi.com/stk-terrain/v1/tilesets/world/tiles',
},
imageryProviderOptions: {
url: 'https://assets.agi.com/stk-terrain/v1/tilesets/world/tiles',
enablePickFeatures: false,
},
}
},
methods: {
onReady() {
let viewer = this.$refs.cesiumRef.getCesiumViewer()
// Load 3D model
let model = Cesium.Model.fromGltf({
url: './path/to/model.gltf',
show: true,
allowPicking: true,
})
// Set model position
let lng = 120.0
let lat = 30.0
let height = 0.0
model.position = Cesium.Cartesian3.fromDegrees(lng, lat, height)
// Set model scale
let scale = 100.0
model.scale = scale
// Set model direction
model.direction = Cesium.Cartesian3.UNIT_Z
// Add model to scene
let modelEntity = viewer.scene.primitives.add(model)
},
},
}
</script>
以下内容部分参考ChatGPT模型:
首先,需要准备一个带有纹理的模型,可以使用3D建模软件(如Blender)来制作。将模型导出为.osgb格式。
接下来,需要安装并引入vue3-cesium库,可以使用npm命令进行安装:
npm install vue3-cesium --save
然后,在Vue组件中引入CesiumViewer组件,并在mounted生命周期中初始化CesiumViewer实例:
<template>
<cesium-viewer ref="viewer"></cesium-viewer>
</template>
<script>
import { defineComponent } from 'vue'
import { Viewer } from 'cesium'
import { CesiumViewer } from 'vue3-cesium'
export default defineComponent({
components: {
CesiumViewer
},
mounted() {
this.viewer = new Viewer(this.$refs.viewer.$el)
}
})
</script>
接下来,将模型加载到CesiumViewer中。可以使用Cesium的Entity和Model来加载模型。在mounted生命周期中,可以添加以下代码:
mounted() {
this.viewer = new Viewer(this.$refs.viewer.$el)
const model = this.viewer.entities.add({
name: 'My Model',
position: Cesium.Cartesian3.fromDegrees(-75.62898254394531, 40.02804946899414, 100),
model: {
uri: '/path/to/your/model.osgb'
}
})
this.viewer.zoomTo(model)
}
其中,name表示模型名称,position表示模型在地球上的位置,uri表示模型文件路径。最后一行代码为自动缩放地球以显示模型。
完整代码示例:
<template>
<cesium-viewer ref="viewer"></cesium-viewer>
</template>
<script>
import { defineComponent } from 'vue'
import { Viewer, Cartesian3 } from 'cesium'
import { CesiumViewer } from 'vue3-cesium'
export default defineComponent({
components: {
CesiumViewer
},
mounted() {
this.viewer = new Viewer(this.$refs.viewer.$el)
const model = this.viewer.entities.add({
name: 'My Model',
position: Cartesian3.fromDegrees(-75.62898254394531, 40.02804946899414, 100),
model: {
uri: '/path/to/your/model.osgb'
}
})
this.viewer.zoomTo(model)
}
})
</script>
如果我的建议对您有帮助、请点击采纳、祝您生活愉快