Cesium实时目标跟踪最新特效教程系列2—粒子系统(实时发射波束跟踪目标)

cesium粒子特效 实时跟踪目标发射波束, sourEntity 实时发射波束跟踪 tarEntity,官网上给出的demo是随机发射粒子,没有跟踪目标。下面给出了怎样实时发射波束且跟踪目标的。最主要的是粒子系统的updateCallback属性中根据tarEntity的实时位置来实时更新粒子位置。效果图如下

 

function generateSX(sourEntity,tarEntity){
   var curtime = viewer.clock.currentTime;
   var sourPos = sourEntity.position.getValue(curtime);

    var tarPos= tarEntity.position.getValue(curtime);
     
   var particleEntity = new Cesium.ParticleSystem({
      
         image : getImage(),//粒子形状
         imageSize : new Cesium.Cartesian2(20, 20),//粒子形状大小

         startColor : Cesium.Color.AQUA.withAlpha(0.7),//开始颜色
         endColor : Cesium.Color.WHITE.withAlpha(0.0),//结束颜色

         startScale : viewModel.startScale,//开始大小
         endScale : viewModel.endScale,//结束大小

         minimumSpeed : viewModel.minimumSpeed,//最小速度
         maximumSpeed : viewModel.maximumSpeed,//最大速度

 
         emissionRate : viewModel.emissionRate,
         
         bursts : [
             new Cesium.ParticleBurst({time : 5.0, minimum : 10, 
maximum : 100}),
             new Cesium.ParticleBurst({time : 10.0, minimum : 50,
maximum : 100}),
             new Cesium.ParticleBurst({time : 15.0, minimum : 200,
 maximum : 300})
         ],
         lifetime : 1.0,//生命周期
         loop : true,//是否循环
         modelMatrix:computeModelMatrix(sourEntity),
         emitter : new Cesium.CircleEmitter(2.0),
         emitterModelMatrix : computeEmitterModelMatrix(),

         updateCallback : function(particle,dt){//particle是当前粒子对象,
可以由很多属性,dt是时间步长。之前有一个属性是particleLife表
示每个粒子被发射出来后的生存时间。dt就是将这段时间均分的步长。
下面我们对粒子的位置进行改变。
             var result = new Cesium.Cartesian3();
             var curtime = viewer.clock.currentTime;
             var position= tarEntity.position.getValue(curtime,result);
             if(!Cesium.defined(tarEntity)){//如果目标消失
               scene.primitives.remove(particle);
               return new Cesium.Cartesian3();
            }
            
            if(!Cesium.defined(position)){ //如果获取不到目标实时位置                    
scene.primitives.remove(this);
               return new Cesium.Cartesian3();
            }
            var midpoint1 = Cesium.Cartesian3.midpoint(particle.position,
 position);
            var midpoint2 = Cesium.Cartesian3.midpoint(particle.position,
 midpoint1);
            var positionA = Cesium.Cartesian3.normalize(midpoint2, 
new Cesium.Cartesian3());//将粒子的位置向量正则化为单位值。
            Cesium.Cartesian3.multiplyByScalar(positionA , 1, 
positionA );//将单位向量按比例进行缩放
            particle.position= Cesium.Cartesian3.add(midpoint2, 
positionA , particle.position);//在粒子发射方向加上成比例
缩放的向量,更新粒子位置
         }
     });
    var particleSystem = viewer.scene.primitives.add(particleEntity);
    return particleEntity;
}

 

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值