之前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
。當相機位于地下時,背面和正面會交換,即背面幾何形狀被視為正面。
還可以設置矩形范圍,來呈現范圍內的透明表面。