点击查看:最新Cesium可视化系统实战视频课程
Cesium 是一个强大的开源虚拟地球框架,广泛应用于地理信息系统(GIS)、3D 地图渲染、模拟等场景。Cesium 提供了丰富的 API 用于设置地球的视觉效果,其中大气层效果是一个重要的视觉元素,可以极大地增强地球的真实感。本文将介绍如何使用 Cesium 来设置外大气层效果,包括大气层的光照、散射系数、大气厚度、色调和饱和度等参数的调整。
1. 初始化Cesium视图和大气层
在开始设置大气层效果之前,首先需要初始化一个 Cesium 的 Viewer
对象,并确保启用地球的光照效果。以下是简单的初始化代码:
javascript
viewer.scene.globe.enableLighting = true; // 启用地球的光照效果
let globe = viewer.scene.globe; // 获取globe对象,用于设置大气层效果
2. 大气层光照效果
大气层光照强度是控制大气层光照强弱的参数。通过 atmosphereLightIntensity
,我们可以控制大气层的光照强度,值越大,光照效果越明显。
javascript
gui.add(globe,'atmosphereLightIntensity', 0, 100, 0.1).name('大气层光照强度');
这里使用了 dat.GUI
库来创建一个交互式的界面,通过调整滑块来实时查看效果。
3. 大气的散射系数
大气散射是由大气中粒子的存在(如氮气、氧气、尘土、雾霾等)导致的。当太阳光通过大气时,短波长的光(如蓝光)会被散射得更强烈,而长波长的光(如红光)则较少散射。这种现象会影响到地球的颜色和光照。
Cesium 提供了 atmosphereRayleighCoefficient
来设置大气的 Rayleigh 散射系数,其中包括红、绿、蓝三个颜色通道。通过调整这些值,我们可以模拟不同的光照条件。例如:
javascript
gui.add(globe.atmosphereRayleighCoefficient,'x', 0, 1e-4, 1e-7).name('大气的散射红色系数');
gui.add(globe.atmosphereRayleighCoefficient,'y', 0, 1e-4, 1e-7).name('大气的散射绿色系数');
gui.add(globe.atmosphereRayleighCoefficient,'z', 0, 1e-4, 1e-7).name('大气的散射蓝色系数');
通过这些参数,可以精细控制大气中的散射效果,进而改变地球外观的光照和颜色。
4. Mie 散射系数
Mie 散射主要是由大气中的水汽、雾霾等粒子引起的,与 Rayleigh 散射的机制不同。通过 atmosphereMieCoefficient
,我们可以设置 Mie 散射的系数。以下是对 Mie 散射红色系数的控制:
javascript
gui.add(globe.atmosphereMieCoefficient,'x', 0, 1e-4, 1e-7).name('大气的Mie散射红色系数');
调整 Mie 散射系数可以模拟空气质量变化(如雾霾、湿气等)。
5. 大气的厚度和散射深度
大气的厚度直接影响到大气的视觉效果。Cesium 提供了 atmosphereRayleighScaleHeight
和 atmosphereMieScaleHeight
来设置 Rayleigh 散射和 Mie 散射的 厚度。这些值的调整可以模拟大气层的不同密度,影响地球表面光线的散射与衰减效果。
javascript
gui.add(globe, 'atmosphereRayleighScaleHeight', 0, 200000, 100).name('大气的厚度');
gui.add(globe, 'atmosphereMieScaleHeight', 0, 200000, 100).name('Mie的厚度散射');
6. 大气的各项异性
大气的 各项异性(anisotropy)控制了光线的散射方向。不同的各项异性值会影响光线散射的偏向性。设置该参数可以让大气呈现不同的光照强度和色彩方向性。
javascript
gui.add(globe, 'atmosphereMieAnisotropy', -1, 1, 0.1).name('大气的各项异性');
7. 大气的色调、饱和度和亮度
通过 Cesium 的参数,我们可以调整大气的色调、饱和度和亮度,从而改变大气的整体视觉风格。
- 色调:可以通过
atmosphereHueShift
调整大气的色调。 - 饱和度:通过
atmosphereSaturationShift
调整大气的颜色饱和度。 - 亮度:通过
atmosphereBrightnessShift
调整大气的亮度。
这些参数可以为地球的渲染效果增添更多的艺术感和个性化。
javascript
gui.add(globe, 'atmosphereHueShift', -1, 1, 0.01).name('大气的色调');
gui.add(globe, 'atmosphereSaturationShift', -1, 1, 0.01).name('大气的饱和度');
gui.add(globe, 'atmosphereBrightnessShift', -1, 1, 0.01).name('大气的亮度');
8. 白天和黑夜的过渡光照
白天的过渡光照和黑夜的过渡光照控制了地球白天和夜晚之间的光照过渡效果。调整这两个参数可以影响从白天到黑夜的渐变效果,使得过渡更加平滑、自然。
javascript
gui.add(globe, 'lightingFadeInDistance', 0, 1e8, 1e6).name('白天的过渡光照');
gui.add(globe, 'lightingFadeOutDistance', 0, 1e8, 1e6).name('黑夜的过渡光照');