Cesium基础知识-粒子应用-飞机冒火

  1. viewer = new Cesium.Viewer('cesiumContainer');
  2. var gravityScratch = new Cesium.Cartesian3();
  3. function applyGravity(p, dt) {
  4.     // 计算每个粒子的向上向量(相对地心) 
  5.     var position = p.position;
  6.     Cesium.Cartesian3.normalize(position, gravityScratch);
  7.     Cesium.Cartesian3.multiplyByScalar(gravityScratch, viewModel.gravity * dt, gravityScratch);
  8.     p.velocity = Cesium.Cartesian3.add(p.velocity, gravityScratch, p.velocity);
  9. }
  10. var entity = viewer.entities.add({
  11.     // 加载飞机模型
  12.     model : {
  13.         uri : '../Apps/SampleData/models/CesiumAir/Cesium_Air.glb',
  14.         minimumPixelSize : 64
  15.     },
  16.     position : Cesium.Cartesian3.fromDegrees(-112.110693, 36.0994841, 1000.0)
  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.  function computeEmitterModelMatrix() {
  33.     hpr = Cesium.HeadingPitchRoll.fromDegrees(0.0, 0.0, 0.0, new Cesium.HeadingPitchRoll());
  34.     var trs = new Cesium.TranslationRotationScale();
  35.     trs.translation = Cesium.Cartesian3.fromElements(2.5, 4.0, 1.0, new Cesium.Cartesian3());
  36.     trs.rotation = Cesium.Quaternion.fromHeadingPitchRoll(hpr, new Cesium.Quaternion());
  37.     return Cesium.Matrix4.fromTranslationRotationScale(trs, new Cesium.Matrix4());
  38. }
  39. var particleSystem = viewer.scene.primitives.add(new Cesium.ParticleSystem({
  40.     // Particle appearance
  41.     image : '../Apps/SampleData/fire.png',
  42.     imageSize : new Cesium.Cartesian2(20, 20),
  43.     startScale : 1.0,
  44.     endScale : 4.0,
  45.     // Particle behavior
  46.     particleLife : 1.0,
  47.     speed : 5.0,
  48.     // Emitter parameters
  49.     emitter : new Cesium.CircleEmitter(0.5),
  50.     emissionRate : 5.0,
  51.     emitterModelMatrix : computeEmitterModelMatrix(),
  52.     // Particle system parameters
  53.     modelMatrix : computeModelMatrix(entity, Cesium.JulianDate.now()),
  54.     lifetime : 16.0,
  55.     particleSystem : {
  56.         image : '../Apps/SampleData/fire.png',
  57.         emissionRate: 50.0,
  58.         emitter: new Cesium.BoxEmitter(new Cesium.Cartesian3(10.0, 10.0, 10.0))
  59.     },
  60.     bursts : [
  61.         new Cesium.ParticleBurst({time : 5.0, minimum : 300, maximum : 500}),
  62.         new Cesium.ParticleBurst({time : 10.0, minimum : 50, maximum : 100}),
  63.         new Cesium.ParticleBurst({time : 15.0, minimum : 200, maximum : 300})
  64.     ],
  65.     particleSystem : {
  66.         lifetime: 5.0,
  67.         loop: false
  68.     },
  69.     particleSystem : {
  70.         minimumParticleLife: 5.0,
  71.         maximumParticleLife: 10.0
  72.     },
  73.     particleSystem : {
  74.         startColor: Cesium.Color.RED.withAlpha(0.7),
  75.         endColor: Cesium.Color.YELLOW.withAlpha(0.3)
  76.     },
  77.     particleSystem : {
  78.         minimumImageSize : new Cesium.Cartesian2(30.0, 30.0),
  79.         maximumImageSize : new Cesium.Cartesian2(60.0, 60.0)
  80.     },
  81.     particleSystem : {
  82.         startScale: 1.0,
  83.         endScale: 4.0
  84.     },
  85.     particleSystem : {
  86.         minimumSpeed: 5.0,
  87.         maximumSpeed: 10.0
  88.     },
  89.     particleSystem: {
  90.         forces: applyGravity
  91.     },
  92. }));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值