p5.js入门学习-线性渐变

146 阅读2分钟

语法:

混合两个颜色以找到一个介于它们之间的颜色,范围:0~1,0靠近第一种颜色,1靠近第二种颜色。

// 常量
const Y_AXIS = 1;
const X_AXIS = 2;
let b1, b2, c1, c2;
function setup() {
  // 画布:710*400
  createCanvas(710, 400);
  // 定义颜色
  b1 = color(255);    // 白色
  b2 = color(0);    // 黑色
  c1 = color(204, 102, 0);
  c2 = color(0, 102, 153);
  noLoop();
}
function draw() {
  // 背景(左)
  setGradient(0, 0, width / 2, height, b1, b2, X_AXIS);
  // 背景(右)
  setGradient(width / 2, 0, width / 2, height, b2, b1, X_AXIS);
  // 前景(上)
  setGradient(50, 90, 540, 80, c1, c2, Y_AXIS);
  // 前景(下)
  setGradient(50, 190, 540, 80, c2, c1, X_AXIS);
}
// 自定义渐变色(x, y)为左上角坐标,(w, h)为矩形的宽和高
function setGradient(x, y, w, h, c1, c2, axis) {
  // 取消填充色
  noFill();
  if (axis === Y_AXIS) {
    // 从上到下的渐变,注意循环中的条件
    for (let i = y; i <= y + h; i++) {
      // map可以将i这个数值从(y, y+h)映射至(0, 1)
      let inter = map(i, y, y + h, 0, 1);
      // 每一次循环获取渐变色中的一个颜色数值,该数值是通过map函数获取
      let c = lerpColor(c1, c2, inter);
      stroke(c);
      // 画横线,想一下为什么此循环能实现从上到下的渐变色
      line(x, i, x + w, i);
    }
  } else if (axis === X_AXIS) {
    // 从左到右的渐变,注意循环中的条件
    for (let i = x; i <= x + w; i++) {
      // map可以将i这个数值从(x, x+w)映射至(0, 1)
      let inter = map(i, x, x + w, 0, 1);
      // 每一次循环获取渐变色中的一个颜色数值,该数值是通过map函数获取
      let c = lerpColor(c1, c2, inter);
      stroke(c);
      // 画竖线,想一下为什么此循环能实现从左到右的渐变色
      line(i, y, i, y + h);
    }
  }
}
new p5();

p5js 开源社区 - 乐述云享 (aleshu.com)