Cesium案例-三维模型的轨迹运动(动画控制)
创作时间:
作者:
@小白创作中心
Cesium案例-三维模型的轨迹运动(动画控制)
引用
CSDN
1.
https://blog.csdn.net/qq_58978006/article/details/141717792
本篇文章详细介绍了如何使用Cesium实现三维模型的轨迹运动动画。通过具体的代码示例,展示了地图初始化、实体加载、路线绘制以及场景视图切换等功能的实现方法。对于学习Cesium和三维动画开发的读者具有很高的参考价值。
前言
本章讲述的是在Cesium中实现飞机模型动画的案例,主要实现实体路线绘制、场景视图切换、路径运动过渡效果等功能。也是作为官网实例的练习。如果还不太了解什么是Cesium,可以参见Cesium入门教程的博客(如下)。后续也会更新Cesium的相关实例,帮助自己以及小伙伴们进一步了解Cesium。
实例:https://sandcastle.cesium.com/?src=Interpolation.html&label=All
Cesium入门教程:https://blog.csdn.net/qq_58978006/article/details/141418040
效果:
代码实现
<template>
<div id="customContainer">
<div id="buttonContainer">
<button id="downViewButton">俯视视图</button>
<button id="trackViewButton">实体视图</button>
<button id="sideViewButton">侧面视图</button>
</div>
<div id="selectContainer">
<select id="select">
<option value="LinearApproximation">线性近似插值路径</option>
<option value="HermitePolynomialApproximation">Hermite 多项式近似插值</option>
<option value="LagrangePolynomialApproximation">拉格朗日多项式近似插值路径</option>
</select>
</div>
</div>
<div id="cesiumContainer" style="width: 100%"></div>
</template>
一、初始化地图与viewer.clock时间配置
<script setup lang="ts">
import {
onMounted } from "vue";
import * as Cesium from "cesium";
import "cesium/Build/Cesium/Cesium";
const init = async () => {
//token权限需要在官网获取,详情可看Cesium入门教程指导
Cesium.Ion.defaultAccessToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJiMmU4NTA0Ni1hM2VjLTQwYzItOTBhZi00NmNkM2I2MjFhMmMiLCJpZCI6MjM2MDEzLCJpYXQiOjE3MjQyMDg0ODR9.CB3bMqYbHybdGa3cHoTHdQgTh3DchtTOJ_Grosr3YfU";
const viewer = new Cesium.Viewer("cesiumContainer", {
//需要的配置项否则会出现报错,详见问题注意点
infoBox: false,
//如果不设置添加的模型实体动画不显示
shouldAnimate: true,//控制视图是否在动画中,用于启用或禁用视图动画
//三维展示地形地势、水形数据
terrainProvider: await Cesium.createWorldTerrainAsync({
requestWaterMask: true,
requestVertexNormals: true,
}),
});
//new Date(2024, 5, 20, 17, 30, 21),表示 2024 年 6 月 20 日 17:30:21
//可以使用 Cesium.JulianDate.now() 来表示当前的事件时间。这个方法会获取当前的 JulianDate
const startTime = Cesium.JulianDate.fromDate(new Date(2024, 5, 20, 17));
const stopTime = Cesium.JulianDate.addSeconds(startTime, 360, new Cesium.JulianDate());
viewer.clock.startTime = startTime.clone();
viewer.clock.stopTime = stopTime.clone();
viewer.clock.multiplier = 20; //将时间流逝速度设为正常的 20 倍
viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP;
//将视图设置为提供的时间
viewer.timeline.zoomTo(startTime, stopTime);
viewer.camera.setView({
destination: Cesium.Cartesian3.fromDegrees(-122.541, 37.815, 2000),
orientation: {
heading: Cesium.Math.toRadians(90),
pitch: Cesium.Math.toRadians(-20),
roll: 0,
},
});
参数补充说明:
Cesium.JulianDate.addSeconds(date, seconds, result):一个静态方法,用于在给定的 JulianDate 对象上添加指定的秒数,从而生成一个新的 JulianDate 对象。
date:原始的 Cesium.JulianDate 对象。seconds:要添加的秒数,可以是正数或负数。result:可选的 Cesium.JulianDate 对象,用于存放结果。如果未提供,将返回一个新的 JulianDate 对象。
二、Entity实体加载与路线绘制
//点位数组
const dataPoint = [
{
longitude: -122.567, latitude: 37.843, height: 200 },
{
longitude: -122.537, latitude: 37.817, height: 500 },
{
longitude
热门推荐
力是矢量吗?一文带你了解力的奥秘!
世界之巅的试炼:攀登珠峰的全攻略
资治通鉴:欲成大事,牢记12字诀,这是历史的血泪教训!
研究理论介绍 | 归因理论(Attribution theory)
山楂树——宝库中的药材
牛肉的功效和营养价值
公安部网安局发布九大常见养老诈骗骗局 赶快提醒爸妈
内存频率未达标准?一文详解XMP功能开启方法
爱因斯坦如何颠覆经典?光速不变原理与狭义相对论的诞生
什么是儒家的大同理想?
台风编号和命名 台风编号是如何制定的
无缘无故”的症结:“老年病”还和心理因素有关?
期权交易必读:止盈止损设置全攻略及买方交易要点
劳务派遣开什么发票
孩子脸上的白斑:探究原因及应对策略
不刷题的吴姥姥:在流量的红海掀起科普的浪潮
提升沟通与管理能力:四本必读经典书籍
不同痘印的处理方法
BUCK拓扑详解(每个器件的详细作用)
第一个重用宦官的唐朝皇帝唐肃宗
如何计算木地板的损耗情况?这种计算方法存在哪些影响因素?
全球前1000名富豪数据分析:财富集中度、行业分布与地域特征
云南元阳将新增一座机场,总投资26.53亿,服务周边五县市
制定用于提供和接收有效反馈的策略
苏州大学方剑/NUS陈瑞深AFM:主动热场集成实现海水淡化阻盐新突破
工业铝型材在船舶制造中的特殊应用
密歇根大学申请指南:从录取要求到难度解读
过完年,奇怪现象:同学聚会没人去了,大家都消失在各自的朋友圈
虚拟号客户管理是什么?如何提升企业客户服务与运营效率?
白衣服水渍怎么处理