<!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>

————————————————