经纬志
首页 / luma.gl / 使用示例

彩色三角形

三个顶点各给一种颜色,三个角分别是红、黄、蓝,中间由 GPU 自动插值成渐变。 这一步是顶点属性、varying 与片元着色器的最小配合。

luma.gl 9.4 · 更新 2026-10-27
源码与运行效果
运行效果

说明

位置与颜色各占一个缓冲区,两个都声明为 float32x3。 顶点着色器把颜色写进 out vec3 vColor,片元着色器用同名的 in vec3 vColor 接收。顶点之间的颜色由光栅化阶段线性插值, 不需要在着色器里写任何混合逻辑。

「换一组配色」按钮只重写颜色缓冲区,位置、着色器与布局都不变。 这是数据与渲染分离的最小示例:几何结构固定,视觉属性可以随时替换。

项目取值说明
属性数量2positions 与 colors
属性格式float32x3三个 32 位浮点分量
图元triangle-list每三个顶点一个三角形
插值光栅化自动完成片元颜色是三个顶点颜色的加权平均
更新方式buffer.write只覆盖颜色缓冲,不重建模型
用途VERTEX | COPY_DST既能被读取,也允许写入

varying 的方向

顶点着色器的 out 与片元着色器的 in 必须同名、同类型。 只写一边,链接会失败;名字拼错,链接同样失败,但错误信息不一定直观。 这类问题优先检查两段着色器的变量声明是否逐字一致。

颜色插值的实际用途

顶点颜色在 GIS 里常用于表达连续场:把高程、温度、浓度写到顶点上, 面片内部的过渡由 GPU 完成,比预生成整张贴图更省内存。 缺点是颜色精度受顶点密度限制,稀疏网格上色带会显得生硬。

片元着色器要声明输出。GLSL 300 es 不再使用 gl_FragColor, 必须写 out vec4 fragColor 并显式赋值。混用旧写法会直接编译失败。