点击查看:最新Cesium可视化系统实战视频课程

2025020618572136aa750f42cf8262b16bc3f6f79bb358343在Cesium中,大气层的效果包括多个方面,例如大气的散射、光照、雾霾、雾霾浓度等,都是通过skyAtmospherefog等对象来控制的。下面将根据代码示例,逐一讲解如何设置Cesium中的大气层内效果。

1. 启用地球的光照效果

javascript
viewer.scene.globe.enableLighting = true;

这行代码启用了地球的光照效果。光照效果可以模拟太阳光的照射,增加视觉真实感。

2. 获取并操作 skyAtmosphere 对象

javascript
let skyAtmosphere = viewer.scene.skyAtmosphere;

这里我们通过 viewer.scene.skyAtmosphere 获取到当前场景的天空大气层对象。skyAtmosphere 是 Cesium 用来模拟大气层的对象,包含了多个大气层的可调属性。

3. 设置内大气层的光照强度

javascript
gui.add(skyAtmosphere, 'atmosphereLightIntensity', 0, 100, 1).name('内大气层光照强度');

atmosphereLightIntensity 控制内大气层的光照强度。通过调整这个值,可以控制大气的亮度效果。值越高,天空看起来越亮。

4. 设置内大气层的散射系数

大气散射是影响天空颜色和透明度的一个重要因素,尤其是 Rayleigh 散射(影响蓝天)和 Mie 散射(影响雾霾和云)。以下是三个散射系数的设置:

  • 散射红色系数:控制大气中的红色光散射强度
    javascript
    gui.add(skyAtmosphere.atmosphereRayleighCoefficient, 'x', 0, 1e-4, 1e-7).name('内大气层的散射红色系数');
    
  • 散射绿色系数:控制大气中的绿色光散射强度
    javascript
    gui.add(skyAtmosphere.atmosphereRayleighCoefficient, 'y', 0, 1e-4, 1e-7).name('内大气层的散射绿色系数');
    
  • 散射蓝色系数:控制大气中的蓝色光散射强度
    javascript
    gui.add(skyAtmosphere.atmosphereRayleighCoefficient, 'z', 0, 1e-4, 1e-7).name('内大气层的散射蓝色系数');
    

这三个参数分别控制大气中不同波长(红、绿、蓝)的光散射。Rayleigh 散射主要影响蓝色和紫色波长的光,因此调节这些值可以改变天空的颜色,特别是晨昏时的天空色调。

5. 设置 Mie 散射系数

Mie 散射影响的波长不如 Rayleigh 散射那样依赖于光的颜色,但它通常与雾霾、云层等现象相关。

javascript
gui.add(skyAtmosphere.atmosphereMieCoefficient, 'x', 0, 1e-4, 1e-7).name('内大气层的mie散射红色系数');

atmosphereMieCoefficient 控制大气中 Mie 散射的强度。xyz 分别对应红、绿、蓝通道的散射强度。增加这些值可以增加大气中的雾霾效果。

6. 设置大气层的厚度

javascript
gui.add(skyAtmosphere, 'atmosphereRayleighScaleHeight', 0, 20000, 1000).name('内大气层的厚度');

atmosphereRayleighScaleHeight 控制大气层的厚度,影响天空色彩的渐变。值越大,表示大气层越厚,颜色渐变效果越明显。

7. 设置大气层的各项异性

javascript
gui.add(skyAtmosphere, 'atmosphereMieAnisotropy', 0, 1, 0.01).name('内大气层的各项异性');

atmosphereMieAnisotropy 控制大气中 Mie 散射的各项异性。各项异性描述了光在不同方向上的散射差异,通常用于模拟阳光或大气中的不对称散射现象。

8. 设置大气层是否使用每像素计算

javascript
gui.add(skyAtmosphere, 'perFragmentAtmosphere', false, true).name('控制大气内效果计算是根据每个像素计算');

perFragmentAtmosphere 用于控制大气效应是通过每个像素来计算(per-fragment)还是通过更大范围(例如每个网格或区域)来计算。如果启用每像素计算,效果会更精细,但可能会影响性能。

9. 设置是否启用雾霾

javascript
gui.add(viewer.scene.fog, 'enabled', false, true).name('控制是否启用雾霾');

enabled 控制是否启用雾霾效果。雾霾可以增加大气层的视觉效果,模拟雾霾天气的场景。

10. 设置雾霾浓度

javascript
gui.add(viewer.scene.fog, 'density', 0, 0.01, 0.001).name('控制雾霾的浓度');

density 控制雾霾的浓度。数值越大,雾霾效果越强烈,景物会变得越模糊。

11. 设置雾霾中的最低亮度

javascript
gui.add(viewer.scene.fog, 'minimumBrightness', 0, 1, 0.01).name('控制雾霾中的最低亮度');

minimumBrightness 用来设置雾霾中的最低亮度。这个参数通常用来模拟在雾霾环境下阳光或人工光源的强度。

12. 设置是否开启动态大气光

javascript
gui.add(globe, 'dynamicAtmosphereLighting', false, true).name('是否开启动态大气光');

dynamicAtmosphereLighting 控制是否开启动态大气光。启用时,可以根据视角和光源位置动态调整大气光照效果,使得效果更为真实。

13. 设置是否显示外太空大气效果

javascript
gui.add(globe, 'showGroundAtmosphere', false, true).name('是否显示外太空大气效果');

showGroundAtmosphere 控制是否显示地面外的太空大气效果。这个效果通常用于模拟地球大气层与外太空之间的过渡区域。

14. 设置视角飞行到指定位置

javascript
viewer.camera.flyTo({
  destination: Cesium.Cartesian3.fromDegrees(120, 30, 100),
});

最后,通过 flyTo 方法让视角飞行到指定经纬度的地点,这里是 120° 经度,30° 纬度,飞行高度为 100 米。


总结

以上代码展示了如何通过 Cesium 的 skyAtmospherefog 对象,设置和调节地球大气层中的多个视觉效果。通过这些设置,可以模拟不同的天气、光照、雾霾等场景,达到更加真实的视觉效果。这些设置不仅仅影响天空的颜色,还能影响大气中光线的传播、散射和反射,从而影响场景的整体气氛和视觉表现。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注