- viewer = new Cesium.Viewer('cesiumContainer');
- //创建粒子
- function CreateParticles() {
- var particleSystem = viewer.scene.primitives.add(new Cesium.ParticleSystem({
- image : '../Apps/SampleData/smoke.png',
- imageSize : new Cesium.Cartesian2(20, 20),
- startScale : 1.0,
- endScale : 4.0,
- particleLife : 1.0,
- speed : 5.0,
- emitter : new Cesium.CircleEmitter(0.5),
- emissionRate : 5.0,
- modelMatrix : entity.computeModelMatrix(viewer.clock.startTime, new Cesium.Matrix4()),
- 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})
- ],
- lifetime : 16.0,
- loop: false,
- minimumParticleLife: 5.0,
- maximumParticleLife: 10.0,
- startColor : Cesium.Color.LIGHTSEAGREEN.withAlpha(0.7),
- endColor : Cesium.Color.WHITE.withAlpha(0.0),
- minimumImageSize : new Cesium.Cartesian2(30.0, 30.0),
- maximumImageSize : new Cesium.Cartesian2(60.0, 60.0),
- minimumSpeed: 5.0,
- maximumSpeed: 10.0,
- }));
- }
- //CreateParticles();
- //盒型发射器
- function BoxEmitterParticles() {
- var particleSystem = scene.primitives.add(new Cesium.ParticleSystem({
- image : '../Apps/SampleData/smoke.png',
- color: Cesium.Color.MAGENTA,
- emissionRate: 5.0,
- emitter: new Cesium.BoxEmitter(new Cesium.Cartesian3(5.0, 5.0, 5.0)),
- imageSize : new Cesium.Cartesian2(25.0, 25.0),
- modelMatrix : entity.computeModelMatrix(viewer.clock.startTime, new Cesium.Matrix4()),
- lifetime : 16.0
- }));
- }
- //BoxEmitterParticles();
- //圆形发射器
- function CircleEmitterParticles() {
- var particleSystem = scene.primitives.add(new Cesium.ParticleSystem({
- image : '../Apps/SampleData/smoke.png',
- color: Cesium.Color.MAGENTA,
- emissionRate: 5.0,
- emitter: new Cesium.CircleEmitter(5.0),
- imageSize : new Cesium.Cartesian2(25.0, 25.0),
- modelMatrix : entity.computeModelMatrix(viewer.clock.startTime, new Cesium.Matrix4()),
- lifetime : 16.0
- }));
- viewer.zoomTo(viewer.particleSystem);
- }
- //CircleEmitterParticles();
- //球形发射器
- function SphereEmitterParticles(params) {
- var particleSystem = scene.primitives.add(new Cesium.ParticleSystem({
- image : '../Apps/SampleData/smoke.png',
- color: Cesium.Color.MAGENTA,
- emissionRate: 5.0,
- emitter: new Cesium.SphereEmitter(5.0),
- imageSize : new Cesium.Cartesian2(25.0, 25.0),
- modelMatrix : entity.computeModelMatrix(viewer.clock.startTime, new Cesium.Matrix4()),
- lifetime : 16.0
- }));
- }
- //SphereEmitterParticles();
- //锥形发射器
- function ConeEmitterParticles() {
- var particleSystem = scene.primitives.add(new Cesium.ParticleSystem({
- image : '../Apps/SampleData/smoke.png',
- color: Cesium.Color.MAGENTA,
- emissionRate: 5.0,
- emitter: new Cesium.ConeEmitter(Cesium.Math.toRadians(30.0)),
- imageSize : new Cesium.Cartesian2(25.0, 25.0),
- modelMatrix : entity.computeModelMatrix(viewer.clock.startTime, new Cesium.Matrix4()),
- lifetime : 16.0,
- }));
- }
- //ConeEmitterParticles();
- //回调
- function CallBack() {
- 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);
- }
- updateCallback: applyGravity
- }
- //CallBack();
- //粒子特效位置
- 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(2.5, 4.0, 1.0, new Cesium.Cartesian3());
- trs.rotation = Cesium.Quaternion.fromHeadingPitchRoll(hpr, new Cesium.Quaternion());
- return Cesium.Matrix4.fromTranslationRotationScale(trs, new Cesium.Matrix4());
- }
Cesium基础知识-粒子基础属性
于 2022-01-19 14:27:52 首次发布