Cesium创建火焰粒子

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;
        }
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值