JavaScript代码
- viewer = new Cesium.Viewer('cesiumContainer');
- var gravityVector = new Cesium.Cartesian3();
- var gravity = -(9.8 * 9.8);
- function applyGravity(p, dt) {
- // Compute a local up vector for each particle in geocentric space.
- var position = p.position;
- Cesium.Cartesian3.normalize(position, gravityVector);
- Cesium.Cartesian3.multiplyByScalar(gravityVector, gravity * dt, gravityVector);
- p.velocity = Cesium.Cartesian3.add(p.velocity, gravityVector, p.velocity);
- }
- var entity = viewer.entities.add({
- model : {
- uri : '../Apps/SampleData/models/CesiumMilkTruck/CesiumMilkTruck.glb',
- minimumPixelSize : 64
- },
- position : Cesium.Cartesian3.fromDegrees(-75.15787310614596, 39.97862668312678)
- });
- viewer.trackedEntity = entity;
- function computeModelMatrix(entity, time) {
- var position = Cesium.Property.getValueOrUndefined(entity.position, time, new Cesium.Cartesian3());
- if (!Cesium.defined(position)) {
- return undefined;
- }
- var orientation = Cesium.Property.getValueOrUndefined(entity.orientation, time, new Cesium.Quaternion());
- if (!Cesium.defined(orientation)) {
- var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position, undefined, new Cesium.Matrix4());
- } else {
- modelMatrix = Cesium.Matrix4.fromRotationTranslation(Cesium.Matrix3.fromQuaternion(orientation, new Cesium.Matrix3()), position, new Cesium.Matrix4());
- }
- return modelMatrix;
- }
- function computeEmitterModelMatrix() {
- hpr = Cesium.HeadingPitchRoll.fromDegrees(0.0, 0.0, 0.0, new Cesium.HeadingPitchRoll());
- var trs = new Cesium.TranslationRotationScale();
- trs.translation = Cesium.Cartesian3.fromElements(-4, 0.0, 1.4, new Cesium.Cartesian3());
- trs.rotation = Cesium.Quaternion.fromHeadingPitchRoll(hpr, new Cesium.Quaternion());
- return Cesium.Matrix4.fromTranslationRotationScale(trs, new Cesium.Matrix4());
- }
- var particleSystem = viewer.scene.primitives.add(new Cesium.ParticleSystem({
- image : '../Apps/SampleData/smoke.png',
- startColor : Cesium.Color.LIGHTSEAGREEN.withAlpha(0.7),
- endColor : Cesium.Color.WHITE.withAlpha(0.0),
- imageSize : new Cesium.Cartesian2(25, 25),
- startScale : 1.0,
- endScale : 4.0,
- particleLife : 1.0,
- speed : 5.0,
- minimumSpeed: 1.0,
- maximumSpeed: 10.0,
- emitter : new Cesium.CircleEmitter(0.5),
- emissionRate : 5.0,
- modelMatrix : computeModelMatrix(entity, Cesium.JulianDate.now()),
- lifetime : 16.0,
- bursts : [
- new Cesium.ParticleBurst({time : 5.0, minimum : 300, maximum : 500}),
- new Cesium.ParticleBurst({time : 10.0, minimum : 50, maximum : 100}),
- new Cesium.ParticleBurst({time : 15.0, minimum : 200, maximum : 300})
- ],
- loop: false,
- minimumImageSize : new Cesium.Cartesian2(30.0, 30.0),
- maximumImageSize : new Cesium.Cartesian2(60.0, 60.0),
- startScale: 1.0,
- endScale: 4.0,
- updateCallback : applyGravity,
- forces: applyGravity,
- emitterModelMatrix : computeEmitterModelMatrix(),
- }));