You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Cesium中Entity(点)3D模式不显示及Columbus模式海拔异常问题

问题分析与解决方案

1. 3D模式下点被隐藏的问题

你设置了cesiumViewer.scene.globe.depthTestAgainstTerrain = true,这个属性会让场景里的实体和地形做深度测试——简单说就是如果地形的像素比你的点更靠近相机,点就会被地形挡住。

你的点实体默认开启了depthTest属性(值为true),再加上地形深度测试的开关打开,要是你的点高度(1000米)低于当前视角下地形的实际海拔(比如某些高精度地形区域的海拔可能超过1000米,或者相机角度刚好让地形挡住了点),就会出现点被隐藏的情况。

解决办法:

  • 关闭点的深度测试:在点的配置里加一行depthTest: false,这样点会始终显示在地形上面,不受地形深度测试的影响:
    var debris = cesiumViewer.entities.add({
        position : { 
            value : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883, 1000),
            referenceFrame : Cesium.ReferenceFrame.FIXED 
        },
        point : { 
            color : Cesium.Color.YELLOW,
            pixelSize : 6,
            depthTest: false // 添加这一行
        }
    });
    
  • 调高点的海拔:如果想保留深度测试,可以试着把点的高度设得更高,确保它超过所在位置的地形海拔。
  • 关闭地形深度测试:要是你不需要其他实体和地形做深度测试,直接删掉cesiumViewer.scene.globe.depthTestAgainstTerrain = true这行代码就行。

2. Columbus模式下点海拔显示为0的问题

Columbus模式(也就是2.5D视图)是把地球投影成平面的,默认情况下,实体的高度信息可能不会被直观渲染,或者Cesium会自动把实体贴地显示。这是因为你没明确指定位置的heightReference属性,Cesium默认用了CLAMP_TO_GROUND(贴地)的行为。

解决办法:

  • 明确设置高度参考系:在position配置里加heightReference: Cesium.HeightReference.ABSOLUTE,告诉Cesium用绝对高度(相对于WGS84椭球体的高度):
    var debris = cesiumViewer.entities.add({
        position : { 
            value : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883, 1000),
            referenceFrame : Cesium.ReferenceFrame.FIXED,
            heightReference: Cesium.HeightReference.ABSOLUTE // 添加这一行
        },
        point : { 
            color : Cesium.Color.YELLOW,
            pixelSize : 6,
            depthTest: false // 可选,解决3D模式的问题
        }
    });
    
  • 调整视角验证高度:Columbus模式下高度会以“凸起”的形式显示在平面上,你可以调整相机从侧面观察,就能看到点的高度了。如果还是不明显,也可以用billboard实体代替point,它在Columbus模式下的高度表现会更直观。

另外提个小细节:Cesium.ReferenceFrame.FIXED是默认的参考系,其实可以省略不写,代码会更简洁。

内容的提问来源于stack exchange,提问作者Leeloo

火山引擎 最新活动