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

把实体贴到起伏地形

高程由余弦函数算出,32 × 32 的高度图拼成一座山。 椭圆面、翻山的线、三个标记点都设了贴地,位置随地形起伏。

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

高度图怎么喂给地球

CustomHeightmapTerrainProvider 的 callback 按瓦片的行列号与层级返回一个 Float32Array, 长度是 width × height。示例把每个像素折算成经纬度, 再调用 heightAt 求高程,全部计算都在前端完成。

32 × 32 的分辨率比较粗,山头会出现明显的块状台阶。 把 SIZE 提高到 64 或 128 会更平滑,代价是每块瓦片计算量变大。

贴地的三种图元

点和标签用 heightReference: CLAMP_TO_GROUND, 线和面用 clampToGround: true。两种写法都会在渲染时 采样地形高度,因此不需要手动给每个顶点写高程。

面板上的两个高程来自 sampleTerrainMostDetailed, 返回的是同一份地形数据算出的结果,可以和画面里的贴地效果对照。

可调参数

位置改什么效果
SIZE32 改成 64山体更平滑,计算更慢
heightAt 的系数1800 改成 600山体变矮
椭圆的半径5200 / 3800 各减半覆盖范围缩小
scene.globe.enableLighting改成 false坡面明暗消失

贴地依赖地形就绪。地形瓦片还没加载完时,贴地图元会先落在一个 估算高度上,随后跳到位。示例先设置 terrainProvider 再添加实体, 并把相机放在较高的位置,让首批瓦片尽快加载完毕。