Cesium地下墙体穿透地形可见问题求助
解决Cesium地下墙体穿透地形的问题
问题原因
地下墙体穿透地形显示,核心是Entity的Wall默认未开启与地形的深度测试,导致墙体不会被地形遮挡。而globe.translucency.enabled = false仅控制地球本身的半透明状态,和墙体的遮挡逻辑无关,因此没有效果。
解决方案
1. 开启Wall的地形深度测试
在创建Wall实体时,添加depthTestAgainstTerrain: true属性,强制墙体与地形进行深度测试,地下部分就会被地形遮挡:
const entity3 = new Cesium.Entity({ id: 'wall', name: '动态立体墙', wall: { positions: positions, maximumHeights: heights, minimumHeights: minimumHeights, material: Cesium.Color.fromCssColorString('rgba(0,255,255)'), fill: true, depthTestAgainstTerrain: true // 新增:开启地形深度测试 } });
2. 优化地形加载逻辑(可选)
你在renderWall中重复加载了地形数据,而初始化阶段已经加载过地形,直接复用已有的terrainProvider即可,避免重复请求:
// 替换renderWall中的地形加载代码 const terrainProvider = cesiumViewer.value.scene.terrainProvider; const promise = Cesium.sampleTerrainMostDetailed(terrainProvider, cartographics); promise.then((data) => { // 获取位置对应的高度 const heights = data.map((d) => d.height); // ... 后续创建Wall实体的代码不变 });
额外说明
你通过Primitive实现的地球裁剪逻辑是正常的,覆盖区域的Primitive会正确遮挡地球其他部分,不会影响墙体与地形的深度测试逻辑。
内容的提问来源于stack exchange,提问作者Aubrey Q
相关产品推荐
相关产品推荐

