点击查看:最新Cesium可视化系统实战视频课程
在Cesium中,大气层的效果包括多个方面,例如大气的散射、光照、雾霾、雾霾浓度等,都是通过
skyAtmosphere
和fog
等对象来控制的。下面将根据代码示例,逐一讲解如何设置Cesium中的大气层内效果。
1. 启用地球的光照效果
viewer.scene.globe.enableLighting = true;
这行代码启用了地球的光照效果。光照效果可以模拟太阳光的照射,增加视觉真实感。
2. 获取并操作 skyAtmosphere
对象
let skyAtmosphere = viewer.scene.skyAtmosphere;
这里我们通过 viewer.scene.skyAtmosphere
获取到当前场景的天空大气层对象。skyAtmosphere
是 Cesium 用来模拟大气层的对象,包含了多个大气层的可调属性。
3. 设置内大气层的光照强度
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 散射那样依赖于光的颜色,但它通常与雾霾、云层等现象相关。
gui.add(skyAtmosphere.atmosphereMieCoefficient, 'x', 0, 1e-4, 1e-7).name('内大气层的mie散射红色系数');
atmosphereMieCoefficient
控制大气中 Mie 散射的强度。x
、y
和 z
分别对应红、绿、蓝通道的散射强度。增加这些值可以增加大气中的雾霾效果。
6. 设置大气层的厚度
gui.add(skyAtmosphere, 'atmosphereRayleighScaleHeight', 0, 20000, 1000).name('内大气层的厚度');
atmosphereRayleighScaleHeight
控制大气层的厚度,影响天空色彩的渐变。值越大,表示大气层越厚,颜色渐变效果越明显。
7. 设置大气层的各项异性
gui.add(skyAtmosphere, 'atmosphereMieAnisotropy', 0, 1, 0.01).name('内大气层的各项异性');
atmosphereMieAnisotropy
控制大气中 Mie 散射的各项异性。各项异性描述了光在不同方向上的散射差异,通常用于模拟阳光或大气中的不对称散射现象。
8. 设置大气层是否使用每像素计算
gui.add(skyAtmosphere, 'perFragmentAtmosphere', false, true).name('控制大气内效果计算是根据每个像素计算');
perFragmentAtmosphere
用于控制大气效应是通过每个像素来计算(per-fragment)还是通过更大范围(例如每个网格或区域)来计算。如果启用每像素计算,效果会更精细,但可能会影响性能。
9. 设置是否启用雾霾
gui.add(viewer.scene.fog, 'enabled', false, true).name('控制是否启用雾霾');
enabled
控制是否启用雾霾效果。雾霾可以增加大气层的视觉效果,模拟雾霾天气的场景。
10. 设置雾霾浓度
gui.add(viewer.scene.fog, 'density', 0, 0.01, 0.001).name('控制雾霾的浓度');
density
控制雾霾的浓度。数值越大,雾霾效果越强烈,景物会变得越模糊。
11. 设置雾霾中的最低亮度
gui.add(viewer.scene.fog, 'minimumBrightness', 0, 1, 0.01).name('控制雾霾中的最低亮度');
minimumBrightness
用来设置雾霾中的最低亮度。这个参数通常用来模拟在雾霾环境下阳光或人工光源的强度。
12. 设置是否开启动态大气光
gui.add(globe, 'dynamicAtmosphereLighting', false, true).name('是否开启动态大气光');
dynamicAtmosphereLighting
控制是否开启动态大气光。启用时,可以根据视角和光源位置动态调整大气光照效果,使得效果更为真实。
13. 设置是否显示外太空大气效果
gui.add(globe, 'showGroundAtmosphere', false, true).name('是否显示外太空大气效果');
showGroundAtmosphere
控制是否显示地面外的太空大气效果。这个效果通常用于模拟地球大气层与外太空之间的过渡区域。
14. 设置视角飞行到指定位置
viewer.camera.flyTo({
destination: Cesium.Cartesian3.fromDegrees(120, 30, 100),
});
最后,通过 flyTo
方法让视角飞行到指定经纬度的地点,这里是 120°
经度,30°
纬度,飞行高度为 100
米。
总结
以上代码展示了如何通过 Cesium 的 skyAtmosphere
和 fog
对象,设置和调节地球大气层中的多个视觉效果。通过这些设置,可以模拟不同的天气、光照、雾霾等场景,达到更加真实的视觉效果。这些设置不仅仅影响天空的颜色,还能影响大气中光线的传播、散射和反射,从而影响场景的整体气氛和视觉表现。