<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript" src="./js/ctx.js"></script> </head> <body> <div id="cesiumContainer"> </div> <div id="toolbar"> </div> <script> var initCesium = new InitCesium(); var viewer = initCesium.initViewer('cesiumContainer', { shouldAnimate : true, terrainProvider: Cesium.createWorldTerrain() }); var scene = viewer.scene; scene.globe.depthTestAgainstTerrain = true; scene.camera.setView({ destination : new Cesium.Cartesian3(277096.634865404, 5647834.481964232, 2985563.7039122293), orientation : { heading : 4.731089976107251, pitch : -0.32003481981370063 } }); // snow var snowParticleSize = scene.drawingBufferWidth / 100.0;//例子系统大小 var snowRadius = 100000.0;//雪的半径 var minimumSnowImageSize = new Cesium.Cartesian2(snowParticleSize, snowParticleSize);//最小 雪大小 var maximumSnowImageSize = new Cesium.Cartesian2(snowParticleSize * 2.0, snowParticleSize * 2.0);//最大 雪大小 var snowSystem; var snowGravityScratch = new Cesium.Cartesian3();//竖直位置--名词存疑-实际上是一个坐标 //每个粒子系统在仿真过程种,都会调用更新回调函数来修改粒子的属性。 // 回调函数传过两个参数,一个是粒子本身,另一个是仿真时间步长 var snowUpdate = function(particle, dt) { //计算提供的笛卡尔坐标的标准化形式 snowGravityScratch = Cesium.Cartesian3.normalize(particle.position, snowGravityScratch); //所提供的标量对所提供的笛卡尔分量进行多重变换。最后写入到snowGravityScratch中,随机下落的距离 Cesium.Cartesian3.multiplyByScalar(snowGravityScratch, Cesium.Math.randomBetween(-30.0, -300.0), snowGravityScratch); //粒子速度,两个笛卡尔坐标相加--赋值到第三个分量中,等价于速度自增velocity+=velocity particle.velocity = Cesium.Cartesian3.add(particle.velocity, snowGravityScratch, particle.velocity); //判断相机位置距离, var distance = Cesium.Cartesian3.distance(scene.camera.position, particle.position); //如果距离大于雪的半径,则透明度为0,否则逐渐增加 if (distance > snowRadius) { particle.endColor.alpha = 0.0; } else { particle.endColor.alpha = snowSystem.endColor.alpha / (distance / snowRadius + 0.1); } }; snowSystem = new Cesium.ParticleSystem({ modelMatrix : new Cesium.Matrix4.fromTranslation(scene.camera.position),//粒子系统发射器的位置 minimumSpeed : -1.0,//最小速度 maximumSpeed : 0.0,//最大速度 lifetime : 15.0,//例子生命周期长度 emitter : new Cesium.SphereEmitter(snowRadius), //例子系统发射器,包裹圆形,椭圆,盒子,cone形状的发射器 startScale : 0.5,//起始比例 endScale : 1.0,//终止比例 image : '../data/snowflake_particle.png', emissionRate : 7000.0,//每秒发射的粒子数量 startColor : Cesium.Color.WHITE.withAlpha(0.0),//起始颜色 endColor : Cesium.Color.WHITE.withAlpha(1.0),//终止颜色 minimumImageSize : minimumSnowImageSize,//最小大小 maximumImageSize : maximumSnowImageSize,//最大大小 updateCallback : snowUpdate }); scene.primitives.add(snowSystem); </script> </body> </html>
cesium化繁为简-粒子系统-模拟下雪(雨)
最新推荐文章于 2024-08-15 14:03:25 发布