颜色混合渐变

10 / 15
通过 mix() 函数在红蓝两色之间实现水平渐变,帮助理解线性插值。

vUv.x 作为 mix 的混合因子,让红色从左到右平滑过渡到蓝色:

下面拆解原理。


mix 函数的三个参数

mix(A, B, t) 在颜色 A 和颜色 B 之间做线性插值:

  • t = 0.0 → 100% 是 A
  • t = 0.5 → A 和 B 各 50%
  • t = 1.0 → 100% 是 B

t 越大越偏向 B,t 越小越偏向 A,中间的值产生平滑过渡。


vUv.x 作为混合因子

vUv.x 从画面左边的 0.0 到右边的 1.0。

用它作为 mix 的第三个参数:

  • 最左侧像素:t = 0 → 纯红色 (1.0, 0.0, 0.0)
  • 最右侧像素:t = 1 → 纯蓝色 (0.0, 0.0, 1.0)
  • 画面中间:t = 0.5 → 红蓝各半,变成紫色

试着改一改

改动效果
colorA 改为 vec3(1.0, 1.0, 0.0)从黄色过渡到蓝色
vUv.x 换成 vUv.y改为垂直渐变(底红色到顶蓝色)
vUv.x 换成 vUv.x * vUv.x渐变加速,蓝色在右侧快速出现
vUv.x 换成 1.0 - vUv.x渐变方向反转,左边变蓝右边变红

练习

从空白状态写出完整的着色器,实现从左边红色到右边蓝色的水平渐变。

答案解析

colorA 是纯红色(红 100%,绿 0%,蓝 0%),colorB 是纯蓝色(红 0%,绿 0%,蓝 100%)。mixvUv.x 为权重,在最左侧取 100% 的 colorA,最右侧取 100% 的 colorB,中间线性混合。

初始代码什么都没有。关键步骤是定义两个端点颜色,再用 mix + 坐标分量把它们连起来。

试着在 mix 的第三个参数处用 smoothstep(0.3, 0.7, vUv.x) 替换 vUv.x,渐变会集中在画面中间的 30%–70% 区域,两端维持纯色。

GLSL 代码编辑器

正确代码预览

当前代码预览