Cesium基础知识-粒子应用-汽车冒烟

本文介绍如何使用Cesium JavaScript库创建粒子系统,并通过模拟重力效果来实现粒子的自然下落运动。文中详细展示了如何定义粒子系统属性、设置模型矩阵以及应用重力更新粒子速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JavaScript代码

  1. viewer = new Cesium.Viewer('cesiumContainer');
  2. var gravityVector = new Cesium.Cartesian3();
  3. var gravity = -(9.8 * 9.8);
  4. function applyGravity(p, dt) {
  5.     // Compute a local up vector for each particle in geocentric space.
  6.     var position = p.position;
  7.     Cesium.Cartesian3.normalize(position, gravityVector);
  8.     Cesium.Cartesian3.multiplyByScalar(gravityVector, gravity * dt, gravityVector);
  9.     p.velocity = Cesium.Cartesian3.add(p.velocity, gravityVector, p.velocity);
  10. }
  11. var entity = viewer.entities.add({
  12.     model : {
  13.         uri : '../Apps/SampleData/models/CesiumMilkTruck/CesiumMilkTruck.glb',
  14.         minimumPixelSize : 64
  15.     },
  16.     position : Cesium.Cartesian3.fromDegrees(-75.15787310614596, 39.97862668312678)
  17. });
  18. viewer.trackedEntity = entity;
  19. function computeModelMatrix(entity, time) {
  20.     var position = Cesium.Property.getValueOrUndefined(entity.position, time, new Cesium.Cartesian3());
  21.     if (!Cesium.defined(position)) {
  22.         return undefined;
  23.     }
  24.     var orientation = Cesium.Property.getValueOrUndefined(entity.orientation, time, new Cesium.Quaternion());
  25.     if (!Cesium.defined(orientation)) {
  26.         var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position, undefined, new Cesium.Matrix4());
  27.     } else {
  28.         modelMatrix = Cesium.Matrix4.fromRotationTranslation(Cesium.Matrix3.fromQuaternion(orientation, new Cesium.Matrix3()), position, new Cesium.Matrix4());
  29.     }
  30.     return modelMatrix;
  31.  }

  32.  
  33.  function computeEmitterModelMatrix() {
  34.     hpr = Cesium.HeadingPitchRoll.fromDegrees(0.0, 0.0, 0.0, new Cesium.HeadingPitchRoll());
  35.     var trs = new Cesium.TranslationRotationScale();
  36.     trs.translation = Cesium.Cartesian3.fromElements(-4, 0.0, 1.4, new Cesium.Cartesian3());
  37.     trs.rotation = Cesium.Quaternion.fromHeadingPitchRoll(hpr, new Cesium.Quaternion());
  38.     return Cesium.Matrix4.fromTranslationRotationScale(trs, new Cesium.Matrix4());
  39. }
  40. var particleSystem = viewer.scene.primitives.add(new Cesium.ParticleSystem({
  41.     image : '../Apps/SampleData/smoke.png',
  42.     startColor : Cesium.Color.LIGHTSEAGREEN.withAlpha(0.7),
  43.     endColor : Cesium.Color.WHITE.withAlpha(0.0),
  44.     imageSize : new Cesium.Cartesian2(25, 25),
  45.     startScale : 1.0,
  46.     endScale : 4.0,
  47.     particleLife : 1.0,
  48.     speed : 5.0,
  49.     minimumSpeed: 1.0,
  50.     maximumSpeed: 10.0,
  51.     emitter : new Cesium.CircleEmitter(0.5),
  52.     emissionRate : 5.0,
  53.     modelMatrix : computeModelMatrix(entity, Cesium.JulianDate.now()),
  54.     lifetime : 16.0,
  55.    
  56.     bursts : [
  57.         new Cesium.ParticleBurst({time : 5.0, minimum : 300, maximum : 500}),
  58.         new Cesium.ParticleBurst({time : 10.0, minimum : 50, maximum : 100}),
  59.         new Cesium.ParticleBurst({time : 15.0, minimum : 200, maximum : 300})
  60.     ],
  61.    
  62.     loop: false,
  63.     minimumImageSize : new Cesium.Cartesian2(30.0, 30.0),
  64.     maximumImageSize : new Cesium.Cartesian2(60.0, 60.0),
  65.     startScale: 1.0,
  66.     endScale: 4.0,
  67.     updateCallback : applyGravity,
  68.    
  69.     forces: applyGravity,
  70.     emitterModelMatrix : computeEmitterModelMatrix(),
  71. }));

  72.  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值