You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 05:50:00