zoukankan      html  css  js  c++  java
  • cesium化繁为简-粒子系统-模拟下雪(雨)【转】

    <!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>
    ————————————————
    原文链接:https://blog.csdn.net/A873054267/article/details/103551730

    饮水思源,不忘初心。 要面包,也要有诗和远方。
  • 相关阅读:
    svn command line tag
    MDbg.exe(.NET Framework 命令行调试程序)
    Microsoft Web Deployment Tool
    sql server CI
    VS 2010 One Click Deployment Issue “Application Validation did not succeed. Unable to continue”
    mshtml
    大厂程序员站错队被架空,只拿着五折工资!苟活和离职,如何选择?
    揭秘!Windows 为什么会蓝屏?微软程序员竟说是这个原因...
    喂!千万别忘了这个C语言知识!(~0 == -1 问题)
    Linux 比 Windows 更好,谁反对?我有13个赞成理由
  • 原文地址:https://www.cnblogs.com/mazhenyu/p/14930563.html
Copyright © 2011-2022 走看看