之前Cesium是不能地表透明的,需要改内部代码,将GlobeSurfaceTileProvider.js中的PASS.GLOBE
改成PASS.TRANSPARENT
,通过将地表的drawCommand放到透明队列里渲染。现在发现有了新的方法(其实2020年就有该方法了):GlobeTranslucency。
下面代码是修改影像的透明度,可以看到地下。
const layer = viewer.imageryLayers.get(0);
viewer.scene.globe.baseColor = new Cesium.Color(0.0, 0.0, 0.0, 0); // 把地球背景色透明
layer.alpha = 0.3;
viewer.scene.globe.translucency.backFaceAlpha = 0.5; // 应用于地球背面的恒定半透明度
viewer.scene.globe.translucency.enabled = true; // 开启地表透明
也可以设置根据到相机的距离获取或设置地球背面的近和远半透明属性。
混合的最终alpha值是通过混合 Globe#material
、Globe#imageryLayers
和 Globe#baseColor
来计算的,所有这些都可能包含半透明度。然后乘以正面的 GlobeTranslucency#frontFaceAlpha
和 GlobeTranslucency#frontFaceAlphaByDistance
以及背面的 GlobeTranslucency#backFaceAlpha
和 GlobeTranslucency#backFaceAlphaByDistance
。当相机位于地下时,背面和正面会交换,即背面几何形状被视为正面。
还可以设置矩形范围,来呈现范围内的透明表面。