Cesium实现模型按照指定路线移动(七)

第一步:加载模型行动路径

  //从.czml文件加载模型行动路径
  var dronePromis = Cesium.CzmlDataSource.load(
    "./assets/SampleData/sampleFlight.czml"
  );

第二步:实体的加载和配置

//实体的加载
  //定义drone用来保存实体
  var drone;
  dronePromis.then((dataSource) => {
    //将实体添加的查看器
    viewer.dataSources.add(dataSource);

    //通过ID来选择需要的轨迹的实体,这里是轨迹的实体
    drone = dataSource.entities.getById('Aircraft/Aircraft1');

    //添加和配置运动实体的模型,这里运动的实体
    drone.model = {
      //引入模型
      uri:'./assets/SampleData/Models/CesiumDrone.gltf',

      //配置模型大小的最小值
      minimumPixelSize:128,

      //配置模型大小的最大值
      maximumScale:1000,

      //配置模型轮廓的颜色
      silhouetteColor:Cesium.Color.WHITE,

      //配置轮廓的大小
      silhouetteSize:2,
    }

    //设置方向,根据实体的位置来配置方向
    drone.orientation = new Cesium.VelocityOrientationProperty(drone.position);

    //设置模型初始的位置
    drone.viewFrom = new Cesium.Cartesian3(0, -30, 30);

    //设置查看器,让模型动起来
    viewer.clock.shouldAnimate = true;
  });

所有已配置

<template>
  <div id="cesiumContainer"></div>
</template>

<script setup>
import * as Cesium from "cesium";
import { onMounted } from "vue";
onMounted(() => {
  // 引入服务器提供的图像
  var custom = new Cesium.ArcGisMapServerImageryProvider({
    url: "//services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer",
  });

  //自定义的配置内容
  var viewer = new Cesium.Viewer("cesiumContainer", {
    //配置是否创建baseLayerPicker小部件
    // baseLayerPicker:false,
    //配置图像的提供
    imageryProvider: custom,
    //配置Cesium的世界地形
    terrainProvider: Cesium.createWorldTerrain({
      //配置地形的3D效果
      requestWaterMask: true,
      requestVertexNormals: true,
    }),
  });

  //利用三维坐标来设置摄像头位置
  viewer.camera.setView({
    //设置摄像头初始的具体位置()
    destination: new Cesium.Cartesian3(1332761, -
  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
实现cesium中鼠标拖动模型移动,可以按照以下步骤进行操作: 1. 绑定鼠标事件:在cesium中,可以使用viewer的canvas对象来绑定鼠标事件,如下所示: ```javascript viewer.canvas.addEventListener('mousedown', onMouseDown, false); viewer.canvas.addEventListener('mousemove', onMouseMove, false); viewer.canvas.addEventListener('mouseup', onMouseUp, false); ``` 2. 获取鼠标位置:在鼠标事件处理函数中,可以通过event对象获取鼠标位置,如下所示: ```javascript function onMouseDown(event) { mouseDown = true; mouseX = event.clientX; mouseY = event.clientY; } function onMouseMove(event) { if (mouseDown) { var dx = event.clientX - mouseX; var dy = event.clientY - mouseY; // TODO: 移动模型 mouseX = event.clientX; mouseY = event.clientY; } } function onMouseUp(event) { mouseDown = false; } ``` 3. 移动模型:在鼠标移动事件处理函数中,可以计算鼠标移动的距离,然后根据距离移动模型。具体实现方式可以参考以下代码: ```javascript function onMouseMove(event) { if (mouseDown) { var dx = event.clientX - mouseX; var dy = event.clientY - mouseY; var scene = viewer.scene; var pickResult = scene.pick(new Cesium.Cartesian2(event.clientX, event.clientY)); if (pickResult && pickResult.node) { var node = pickResult.node; var modelMatrix = node.modelMatrix; var translation = new Cesium.Cartesian3(dx, dy, 0); var inverseModelMatrix = Cesium.Matrix4.inverse(modelMatrix, new Cesium.Matrix4()); var translationInModelCoordinates = Cesium.Matrix4.multiplyByPoint(inverseModelMatrix, translation, new Cesium.Cartesian3()); Cesium.Matrix4.setTranslation(modelMatrix, translationInModelCoordinates, modelMatrix); } mouseX = event.clientX; mouseY = event.clientY; } } ``` 以上代码中,首先通过scene.pick方法获取鼠标所在位置的模型节点,然后计算模型节点的modelMatrix和鼠标移动的距离,最后通过Cesium.Matrix4.setTranslation方法将模型移动到新的位置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不 这是派大星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值