经纬志
首页 / Cesium / 使用示例

贴地标牌与深度测试

六个山顶标牌锚定在地表,切换深度测试开关可以直接看到差别: 关掉之后,地球背面的标牌也会穿透球体显示出来。

CesiumJS 1.121 · 更新 2026-10-27
源码与运行效果
运行效果

三个开关的关系

标牌能不能被球体挡住,由两处共同决定:globe.depthTestAgainstTerrain 控制地球是否参与深度写入,disableDepthTestDistance 控制图元是否跳过深度比较。 两者都打开,标牌才会被球体遮挡。

大量示例里把 disableDepthTestDistance 写成 Number.POSITIVE_INFINITY,那样标签永远是最高层, 即使在地球背面也照样显示,看起来像是「飘在球外面的浮标」。 做贴地标牌时这个值必须是 0。

CLAMP_TO_GROUND 做了什么

heightReference: CLAMP_TO_GROUND 会把图元的高度改成射线与地表的交点高度。 没有地形时交点就是椭球面,加了地形之后交点跟着地形走,标牌才会落在山坡上。 它只修正高度,水平位置由经纬度决定。

可调参数

位置改什么效果
SITES 数组换坐标与名称标牌位置与文字
pixelOffset(0,-18) 改成 (0,18)文字移到点位下方
outlineWidth: 3改成 0 并去掉 outline 样式纯填充文字,山体背景上更难读
flyTo 高度12000000 改成 3000000拉近到区域尺度,遮挡关系更直观

标牌不跟着地形走。检查地形是否真的加载完成。地形瓦片是异步请求的, 地形就位之前 CLAMP_TO_GROUND 只能贴在椭球面上, 在半山腰的标牌会短暂浮空,地形加载完才落到正确高度。

什么时候该关掉深度测试

全局态势图、大屏展示这类「任何一个点都必须看见」的场景,通常把标牌设成 不参与深度测试,代价是背面的点会透出来,需要靠距离淡出 (translucencyByDistance)来减轻干扰。 行业巡检、地形分析这类需要真实空间关系的场景,保持深度测试开启。