Cesium学习笔记——让我们开始吧

本文介绍了CesiumJS的安装和基本使用方法,包括从官方网站下载软件、将Cesium文件集成到项目中,以及如何通过简单代码创建一个Cesium地球模型。适合初学者快速上手。

由于工作原因,开始接触了CesiumJS,也感受到了其博大切看不懂的一面,为此,特写此笔记,以记录学习(踩坑)过程。

那么,开始。

http://cesium.xin/
这个是Cesium的中文网,相信用着google翻译看着全英文文档也不是什么很舒服的事

https://cesiumjs.org/
这个是Cesium的官网

在这里插入图片描述
这个是下载位置,我使用的是1.55版本

下载完后进入压缩文件中的build文件,把Cesium文件拷贝到项目中即可
在这里插入图片描述在这里插入图片描述在这里插入图片描述
不知为何有些老哥总是说要将Cesium.js删除后在引入,但是我直接用好像也没什么问题,视情况而定吧。

然后新建一个文件夹如图
在这里插入图片描述
在index中输入如下代码可创建一个最简单的Cesium地球

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Cesium</title>
    <script src="./script/Cesium/Cesium.js"></script>
    <link rel="stylesheet" href="./script/Cesium/Widgets/widgets.css">
    <style>
        html,body{
            margin: 0 0;
            padding: 0 0;
            height: 100%;
        }
    </style>
</head>
<body>
    <div id="cesium" style="height: 100%;"></div>
    <script>
         var viewer = new Cesium.Viewer('cesium');
    </script>
</body>
</html>

注意修改页面布局,默认的样式肯定不好看。

在这里插入图片描述

Cesium中实现飞机模型上的雷达扫描粒子效果,可以通过结合Cesium的粒子系统(`ParticleSystem`)和3D模型(如GLTF格式的飞机模型)来完成。以下是一种可行的实现方法: ### 1. 加载飞机模型 首先,使用`Entity`或`DataSource`加载飞机模型到场景中。通常,飞机模型会以GLTF格式提供,并绑定到特定的位置和方向。 ```javascript viewer.entities.add({ position: Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883), model: { uri: 'path/to/airplane.glb', scale: 1.0 } }); ``` ### 2. 创建粒子系统的发射器 为了模拟雷达扫描效果,可以在飞机模型的某个部位(如机头或雷达位置)创建一个粒子发射器。可以使用`ParticleEmitter`类,并将其位置绑定到飞机模型的局部坐标系中。 ```javascript const particlePosition = new Cesium.Cartesian3(0, 0, 0); // 飞机模型局部坐标中的雷达位置 const emitterModelMatrix = Cesium.Matrix4.multiply( viewer.scene.globe.ellipsoid.cartographicToCartesian( Cesium.Cartographic.fromDegrees(-75.59777, 40.03883) ), Cesium.Matrix4.fromTranslation(particlePosition), new Cesium.Matrix4() ); ``` ### 3. 定义雷达扫描粒子效果 使用`ParticleSystem`定义雷达扫描效果。雷达扫描通常表现为扇形区域内的动态粒子扩散,可以通过设置粒子的速度、生命周期、颜色变化等参数来模拟。 ```javascript const radarParticleSystem = viewer.scene.primitives.add(new Cesium.ParticleSystem({ image: 'path/to/particle.png', // 粒子贴图 startColor: Cesium.Color.RED.withAlpha(0.7), endColor: Cesium.Color.YELLOW.withAlpha(0.0), startScale: 1.0, endScale: 3.0, minimumSpeed: 0.1, maximumSpeed: 0.5, life: 2.0, emissionRate: 100, // 每秒发射的粒子数 bursts: [new Cesium.ParticleBurst({ time: 0, minimum: 100, maximum: 200 })], lifetime: 60, modelMatrix: emitterModelMatrix, emitter: new Cesium.CircleEmitter(10.0), // 扇形发射区域 rotationAxis: Cesium.Cartesian3.UNIT_Z, applyWind: false })); ``` ### 4. 动态更新粒子系统位置与方向 由于飞机是移动的,需要在每一帧更新粒子系统的位置和方向,使其始终跟随飞机模型的当前位置和朝向。 ```javascript viewer.scene.postRender.addEventListener(() => { const heading = viewer.entities.values[0].position.getValue(viewer.clock.currentTime).heading; const pitch = viewer.entities.values[0].position.getValue(viewer.clock.currentTime).pitch; const roll = viewer.entities.values[0].position.getValue(viewer.clock.currentTime).roll; const hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll); const orientation = Cesium.Transforms.headingPitchRollQuaternion( viewer.entities.values[0].position.getValue(viewer.clock.currentTime), hpr ); radarParticleSystem.modelMatrix = Cesium.Matrix4.multiply( viewer.scene.globe.ellipsoid.cartographicToCartesian( Cesium.Cartographic.fromCartesian(viewer.entities.values[0].position.getValue(viewer.clock.currentTime)) ), Cesium.Matrix4.fromQuaternion(orientation), new Cesium.Matrix4() ); }); ``` ### 5. 可选:添加扇形扫描动画 为了增强雷达扫描的视觉效果,可以使用定时器控制粒子系统的开启与关闭,或者调整发射器的方向,从而模拟旋转扫描的效果。 ```javascript let angle = 0; setInterval(() => { angle += 0.1; const rotationMatrix = Cesium.Matrix4.fromRotationZ(angle); radarParticleSystem.emitter.direction = Cesium.Matrix3.getColumn(rotationMatrix, 2, new Cesium.Cartesian3()); }, 100); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值