From 9b1bea86818f6d32d2424accb475928edfcecbbc Mon Sep 17 00:00:00 2001 From: xuhongjie <1943105267@qq.com> Date: Thu, 10 Apr 2025 14:25:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86=E6=97=8B=E8=BD=AC=E9=A3=9E?= =?UTF-8?q?=E6=9C=BA=E6=A8=A1=E5=9E=8B=E7=81=AF=E5=85=89=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 4 + package.json | 1 + src/views/components/map/marsMap.vue | 6 +- src/views/components/map/panelLeft.vue | 135 ++++++++++++------------- src/views/map.vue | 2 +- 5 files changed, 76 insertions(+), 72 deletions(-) diff --git a/index.html b/index.html index 9d491ad..072b7cd 100644 --- a/index.html +++ b/index.html @@ -9,6 +9,7 @@ content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" /> <link rel="icon" href="/favicon.ico" /> + <!--引入cesium基础lib--> <link href="https://registry.npmmirror.com/mars3d-cesium/latest/files/Build/Cesium/Widgets/widgets.css" @@ -31,10 +32,13 @@ src="https://registry.npmmirror.com/mars3d/latest/files/mars3d.js" type="text/javascript" ></script> + <!-- <script src="http://www.jichuanglanhai.com/demo/map3d/turf.min.js" type="text/javascript"></script> <link href="http://www.jichuanglanhai.com/demo/map3d/mars3d/mars3d.css" rel="stylesheet" type="text/css" /> <script src="http://www.jichuanglanhai.com/demo/map3d/mars3d/mars3d.js" type="text/javascript"></script> --> + + <!-- <script type="module" src="https://unpkg.com/@google/model-viewer/dist/model-viewer.js"></script> --> <title>若依管理系统</title> <!--[if lt IE 11 ]><script> diff --git a/package.json b/package.json index 07aa9b7..a17ab68 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "pinia": "2.1.7", "splitpanes": "3.1.5", "vue": "3.4.31", + "vue-3d-loader": "^2.2.4", "vue-3d-model": "^2.0.0-alpha.4", "vue-cropper": "1.1.1", "vue-router": "4.4.0", diff --git a/src/views/components/map/marsMap.vue b/src/views/components/map/marsMap.vue index a6fd421..7b88f76 100644 --- a/src/views/components/map/marsMap.vue +++ b/src/views/components/map/marsMap.vue @@ -66,7 +66,7 @@ const params = reactive({ pitch: 0, //保当前俯仰角 roll: 0, //当前翻滚角 correction: 1, - speed: 250, + speed: 260, }); let currentTimestampInSeconds = ref(0); @@ -172,7 +172,7 @@ const handleUavDataLast = () => { //注意:清除默认给的固定线路,否则会出现手柄控制与固定线路冲突问题 uav.position = { type: "time", // 时序动态坐标 - speed: 100, + speed: 130, list: [[120.657967,31.048193,100] ], } @@ -315,7 +315,7 @@ const initUav = () => { name: "无人机模型", position: { type: "time", // 时序动态坐标 - speed: 100, + speed: 130, list: list, }, clockLoop: true, //是否循环播放 diff --git a/src/views/components/map/panelLeft.vue b/src/views/components/map/panelLeft.vue index 2b13dc8..6b63c21 100644 --- a/src/views/components/map/panelLeft.vue +++ b/src/views/components/map/panelLeft.vue @@ -2,25 +2,23 @@ <div class="panel-box panel-left"> <view-title height="50%" title="无人机信息"> <div class="uav-data"> - <div class="uav-name">云航低空研训基地 + <div class="uav-name"> + 云航低空研训基地 <div class="uav-state">待命</div> </div> <div class="uav-model"> <div class="uav-model3d"> - <model-collada - @load="onLoad" - src="src/assets/images/uav-model.dae" - :rotation="rotation" - :position="position" - :height="100" - :lights="lights" + <vue3dLoader + :width="200" + :height="200" + :showFps="false" + filePath="https://data.mars3d.cn/gltf/mars/wrj.glb" :backgroundAlpha="0" - :controls-options="{ - enableRotate: true, // 是否可旋转 - enableZoom: false, // 是否可缩放 - enablePan: false, // 是否可移动(鼠标右键可以移动模型) - }" - /> + @load="onLoad()" + :lights="lights" + :cameraPosition="{ x: 1500, y:1000, z: 500}" + :rotation="rotation" + ></vue3dLoader> </div> <div class="model-bg"></div> </div> @@ -32,7 +30,7 @@ <div class="uav-value"> <div class="value-item"> <div class="value-image"> - <img src="/src/assets/images/uav-value-icon1.png" alt=""> + <img src="/src/assets/images/uav-value-icon1.png" alt="" /> </div> <div class="value-data"> <div class="data-name">站点编号</div> @@ -41,7 +39,7 @@ </div> <div class="value-item"> <div class="value-image"> - <img src="/src/assets/images/uav-value-icon2.png" alt=""> + <img src="/src/assets/images/uav-value-icon2.png" alt="" /> </div> <div class="value-data"> <div class="data-name">无人机编号</div> @@ -50,7 +48,7 @@ </div> <div class="value-item"> <div class="value-image"> - <img src="/src/assets/images/uav-value-icon3.png" alt=""> + <img src="/src/assets/images/uav-value-icon3.png" alt="" /> </div> <div class="value-data"> <div class="data-name">型号</div> @@ -59,11 +57,11 @@ </div> <div class="value-item"> <div class="value-image"> - <img src="/src/assets/images/uav-value-icon4.png" alt=""> + <img src="/src/assets/images/uav-value-icon4.png" alt="" /> </div> <div class="value-data"> <div class="data-name">无人机状态</div> - <div class="data-number" style="color: #13E052;">在线</div> + <div class="data-number" style="color: #13e052">在线</div> </div> </div> </div> @@ -71,49 +69,61 @@ <view-title height="50%" title="无人机实时状态"> <!-- 内容区 --> <div class="contain-grid"> - <div class="grid-item"> - <div class="grid-item-content">{{ uavStore.params.lat.toFixed(3) }}</div> + <div class="grid-item"> + <div class="grid-item-content"> + {{ uavStore.params.lat.toFixed(3) }} + </div> <div class="grid-item-footer"> 纬度 <span class="unit-name">(°)</span> </div> </div> - <div class="grid-item"> - <div class="grid-item-content">{{uavStore.params.lng.toFixed(3)}}</div> + <div class="grid-item"> + <div class="grid-item-content"> + {{ uavStore.params.lng.toFixed(3) }} + </div> <div class="grid-item-footer"> 经度 <span class="unit-name">(°)</span> </div> </div> - <div class="grid-item"> - <div class="grid-item-content">{{ uavStore.params.altitude.toFixed(2) }}</div> + <div class="grid-item"> + <div class="grid-item-content"> + {{ uavStore.params.altitude.toFixed(2) }} + </div> <div class="grid-item-footer"> 高度 <span class="unit-name">(m)</span> </div> </div> - <div class="grid-item"> - <div class="grid-item-content">{{ uavStore.params.heading.toFixed(2) }}</div> + <div class="grid-item"> + <div class="grid-item-content"> + {{ uavStore.params.heading.toFixed(2) }} + </div> <div class="grid-item-footer"> 偏航角 <span class="unit-name">(°)</span> </div> </div> - <div class="grid-item"> - <div class="grid-item-content">{{ uavStore.params.pitch.toFixed(2) }}</div> + <div class="grid-item"> + <div class="grid-item-content"> + {{ uavStore.params.pitch.toFixed(2) }} + </div> <div class="grid-item-footer"> 俯仰角 <span class="unit-name">(°)</span> </div> </div> - <div class="grid-item"> - <div class="grid-item-content">{{ uavStore.params.roll.toFixed(2) }}</div> + <div class="grid-item"> + <div class="grid-item-content"> + {{ uavStore.params.roll.toFixed(2) }} + </div> <div class="grid-item-footer"> 滚转角 <span class="unit-name">(°)</span> </div> </div> - <div class="grid-item"> + <div class="grid-item"> <div class="grid-item-content">{{ uavStore.params.speed }}</div> <div class="grid-item-footer"> 速度 <span class="unit-name">km/h</span> </div> </div> - <div class="grid-item"> + <div class="grid-item"> <div class="grid-item-content">100</div> <div class="grid-item-footer"> 电池电量 <span class="unit-name">%</span> @@ -126,12 +136,22 @@ <script setup> import { ViewTitle } from "@/views/components/map"; -import { ModelCollada } from "vue-3d-model"; -import useUavStore from '@/store/modules/uav' - - -const uavStore = useUavStore() +import { vue3dLoader } from "vue-3d-loader"; +import useUavStore from "@/store/modules/uav"; +const uavStore = useUavStore(); +const lights = ref(); +lights.value = [ + { + type: "AmbientLight", + color: "#fff", + }, +]; +const rotation = reactive({ + x: 0, + y: 0, + z: 0, +}); const onLoad = () => { rotate(); @@ -139,34 +159,11 @@ const onLoad = () => { function rotate() { requestAnimationFrame(rotate); - rotation.y += 0.01; + rotation.y -= 0.01; } -const rotation = reactive({ - x: 0.5, - y: 0, - z: 0, -}); -const position = { - x: 0, - y: 0, - z: 0, -}; -const lights = [ - { - type: "HemisphereLight", - position: { x: 0, y: 15, z: 50 }, - skyColor: 0xffd700, - groundColor: 0xffd700, - intensity: 0.2, - }, - { - type: "DirectionalLight", - position: { x: 0.2, y: 20, z: 1 }, - color: 0xffffff, - intensity: 0.8, - }, -]; + + </script> <style lang="scss" scoped> @@ -189,13 +186,13 @@ const lights = [ font-weight: 400; background: url("../../../assets/images/introduce-cell-bg.png"); background-size: 100% 100%; - .uav-state{ + .uav-state { position: absolute; top: 50%; transform: translateY(-50%); right: -28px; font-size: 12px; - color: #43FFAD; + color: #43ffad; width: 45px; height: 19px; line-height: 19px; @@ -214,7 +211,9 @@ const lights = [ background-size: 100% 100%; .uav-model3d { position: absolute; - top: -75px; + top: -110px; + left: 50%; + transform: translateX(-50%); } } .model-btn { @@ -256,7 +255,7 @@ const lights = [ height: 35px; background: url("../../../assets/images/uav-value-bg.png"); background-size: 100% 100%; - img{ + img { position: absolute; top: -10px; left: 50%; diff --git a/src/views/map.vue b/src/views/map.vue index aac066d..dac206d 100644 --- a/src/views/map.vue +++ b/src/views/map.vue @@ -2,7 +2,7 @@ <div> <map-container> <template #map> - <mars-map></mars-map> + <!-- <mars-map></mars-map> --> </template> <template #left> <panel-left></panel-left>