经纬志
首页 / three.js / 使用示例

高程着色网格

地形网格按海拔逐顶点上色,右侧是同步绘制的色带图例。 平滑渐变与六至十二级分层设色可以随时切换,这是专题制图里最常见的两种表达。

three.js 0.160.0 · 更新 2026-10-28
源码与运行效果
运行效果

颜色写在哪

每个顶点三个浮点数,长度与顶点数相同,挂到 geometry.setAttribute('color', ...)。 材质必须开 vertexColors: true,否则这份数据会被忽略。 颜色值是线性空间,因此用 new THREE.Color('#12324f') 构造, 十六进制字符串会自动按 sRGB 解释并转换。

分层设色只是把归一化高程先量化:Math.floor(t * n) / (n - 1), 这样相邻两条色带之间没有过渡,界限清晰。 真实制图里分级的断点往往不是等距的,按等值线区间给高程表更合适。

环节做法代价
改色带级数重写 color 属性约一万六千顶点,毫秒级
切平滑 / 分层同一函数换量化方式同上
图例canvas 2D 直接绘制与三维画面同源,不会脱节

为什么不改材质颜色

material.color 是全局统一色,改它只能整体染色。 要按高程分区着色,颜色信息必须逐顶点带进 GPU,或者做成贴图由片元采样。 顶点数远小于像素数,逐顶点方案的缓冲更小,也更容易在业务代码里按要素筛选重算。

分带数量与顶点密度要匹配。网格只有 128 段时,一条色带的宽度可能不到两个三角形, 边界会出现锯齿。这种时候把颜色搬到片元里按高程插值,或者先把网格加密, 比单纯提高色带数更有效。