Cesium创建火焰粒子
createParticleFire: function(options) {
var entity = viewer.entities.add({ position:options.position, label: { text: " '' } });
function computeModelMatrix(entity, time) {
var position = Cesium.Property.getValueOrUndefined(entity.position);
var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position);
return modelMatrix;
}
function computeEmitterModelMatrix() {
var hpr = Cesium.HeadingPitchRoll.fromDegrees(0, 0, 0);
var trs = new Cesium.TranslationRotationScale();
trs.translation = Cesium.Cartesian3.fromElements(2.5, 4, 1);
trs.rotation = Cesium.Quaternion.fromHeadingPitchRoll(hpr);
var result = Cesium.Matrix4.fromTranslationRotationScale(trs);
return result;
}
var viewModel = {
emissionRate: 5.0,
gravity: 0.0,
minimumParticleLife: 1.0,
maximumParticleLife: 3.0,
minimumSpeed: 1.0,
maximumSpeed: 4.0,
startScale: 1.0,
endScale: 2.0,
particleSize: 50.0,
transX: 2.5,
transY: 4.0,
transZ: 1.0,
heading: 0.0,
pitch: 0.0,
roll: 0.0,
fly: true,
spin: true,
show: true
};
var primitive = viewer.scene.primitives.add(
new Cesium.ParticleSystem({
image: options.image,
startColor: Cesium.Color.RED.withAlpha(0.7), //粒子出生时的颜色
endColor: Cesium.Color.YELLOW.withAlpha(0.3), //当粒子死亡时的颜色
startScale: viewModel.startScale, //粒子出生时的比例,相对于原始大小
endScale: viewModel.endScale, //粒子在死亡时的比例
minimumParticleLife: viewModel.minimumParticleLife, //设置粒子寿命的可能持续时间的最小界限(以秒为单位),粒子的实际寿命将随机生成
maximumParticleLife: viewModel.maximumParticleLife, //设置粒子寿命的可能持续时间的最大界限(以秒为单位),粒子的实际寿命将随机生成
minimumSpeed: viewModel.minimumSpeed, //设置以米/秒为单位的最小界限,超过该最小界限,随机选择粒子的实际速度。
maximumSpeed: viewModel.maximumSpeed, //设置以米/秒为单位的最大界限,超过该最大界限,随机选择粒子的实际速度。
imageSize: new Cesium.Cartesian2(viewModel.particleSize, viewModel.particleSize), //如果设置该属性,将会覆盖 minimumImageSize和maximumImageSize属性,以像素为单位缩放image的大小
emissionRate: viewModel.emissionRate, //每秒发射的粒子数。
bursts: [
// time:在粒子系统生命周期开始之后的几秒钟内将发生突发事件。
// minimum:突发中发射的最小粒子数量
// maximum:突发中发射的最大粒子数量
// new Cesium.ParticleBurst({ time: 5.0, minimum: 10, maximum: 100 }), // 当在5秒时,发射的数量为10-100
// new Cesium.ParticleBurst({ time: 10.0, minimum: 50, maximum: 100 }), // 当在10秒时,发射的数量为50-100
// new Cesium.ParticleBurst({ time: 15.0, minimum: 200, maximum: 300 }) // 当在15秒时,发射的数量为200-300
],
lifetime: 16.0, //多长时间的粒子系统将以秒为单位发射粒子
emitter: new Cesium.ConeEmitter(Cesium.Math.toRadians(30.0)), //此系统的粒子发射器 共有 圆形、锥体、球体、长方体 ( BoxEmitter,CircleEmitter,ConeEmitter,SphereEmitter ) 几类
modelMatrix: computeModelMatrix(entity, Cesium.JulianDate.now()), // 4x4转换矩阵,可将粒子系统从模型转换为世界坐标
emitterModelMatrix: computeEmitterModelMatrix() // 4x4转换矩阵,用于在粒子系统本地坐标系中转换粒子系统发射器
})
);
entity.remove = function() {
viewer.entities.remove(entity);
viewer.scene.primitives.remove(primitive);
};
return entity;
}