贴地标牌与深度测试
六个山顶标牌锚定在地表,切换深度测试开关可以直接看到差别: 关掉之后,地球背面的标牌也会穿透球体显示出来。
三个开关的关系
标牌能不能被球体挡住,由两处共同决定: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)来减轻干扰。
行业巡检、地形分析这类需要真实空间关系的场景,保持深度测试开启。