需求:加载3Dtiles下面有管线,管线被遮到了所以要3Dtiles半透明。
思路:1.调整地表透明度:imageryLayers的layer的透明度;
2.给3Dtiles的color设置值(为什么判断0:因为透明度为0的时候相当于不透明。而且透明度为0的时候隐藏模型这样下面的管线才能相应点击事件)
// 地表透明度改变
changeLayersAlpha(param) {
let layers = this.viewer.imageryLayers._layers;
for (let i = 0, len = layers.length; i < len; i++) {
layers[i].alpha = param;
}
}
// 场景透明度改变 param是透明度参数范围[0,1]
// 场景透明度改变
changeTilesetsAlpha(param) {
this.tilesets.forEach(function(tileset) {
if( param ==0 ) {
tileset.style = new Cesium.Cesium3DTileStyle({
show: false,
});
}else{
tileset.style = new Cesium.Cesium3DTileStyle({
// //写法一
// color: "color('rgba(255,255,255,"+param+")')",
//写法2
color: {
evaluateColor: function (feature, result) {
let color = new Cesium.Color(1, 1, 1, param);
return color;
}
},
show: true,
});
}
})
}
我有多个3Dtiles所以数组加了循环,对于单个3Dtiles:
let tiles= viewer.scene.primitives.add( new Cesium.Cesium3DTileset({
url: "./tileset.json",
skipLevelOfDetail: true, //开启跳级加载
maximumMemoryUsage: 1024, //最大内存占用 推荐显存的一般
preferLeaves: true,
maximumScreenSpaceError: 16,
maximumNumberOfLoadedTiles: 2000
}));
tiles.style = new Cesium.Cesium3DTileStyle({
color: "color('rgba(255,255,255,"+param+")')",
})
在此特别感谢我瓜哥的指点。瓜哥是谁就不说了,约他吃饭都没时间可能是我太菜了
思路三:场景半透明
//球体半透明
globe.translucency.enabled = true;
globe.translucency.frontFaceAlphaByDistance.nearValue = 0.6;
globe.translucency.frontFaceAlphaByDistance.farValue = 0.5