aa develop

開発と成長

ProcessingのlerpColor()でグラデーションを作る

OpenProcessingでlerpColor()という便利な関数を教えてもらったので、メモ代わりにまとめておきます。

dancing flame- OpenProcessing

lerpColor()は簡単に言うと、lerp()というある2つの値の間を0.0〜1.0の比率で指定して取得することができる関数の色版みたいなもの。

例えば、横方向に変化するグラデーションを作るには、以下のように書く。

color c1, c2;
for(float w = 0; w < width; w += 5){
    color c = lerpColor(c1, c2, w / width);
    fill(c);
    rect(w, 0, 5, height);
}

これを、lerpColor()を使わずに書くとこうなり、RGBを分割してそれぞれ計算しなければならないため、若干めんどくさい。

color c1, c2;
for(float w = 0; w < width; w += 5){
 float r = map(w, 0, width, red(c1), red(c2));
 float g = map(w, 0, width, green(c1), green(c2));
 float b = map(w, 0, width, blue(c1), blue(c2));
    fill(r, g, b);
    rect(w, 0, 5, height);
}

以下、lerpColor()を使って、いくつかのグラデーションをつくってみた。

左から右へのグラデーション
f:id:aa_debdeb:20161004074323j:plain
void setup(){
  size(500, 500);
  noStroke();
  color c1 = color(255, 140, 0);
  color c2 = color(0, 255, 255);
  for(float w = 0; w < width; w += 5){
      color c = lerpColor(c1, c2, w / width);
      fill(c);
      rect(w, 0, 5, height);
  }
}
左上から右下へのグラデーション
f:id:aa_debdeb:20161004074333j:plain
void setup(){
  size(500, 500);
  noStroke();
  color c1 = color(255, 140, 0);
  color c2 = color(0, 255, 255);
  for(float w = 0; w < width; w += 5){
    for(float h = 0; h < height; h += 5){
      color c = lerpColor(c1, c2, (w + h) / (width + height));
      fill(c);
      rect(w, h, 5, 5);
    }
  }
}
円状のグラデーション
f:id:aa_debdeb:20161004074339j:plain
void setup(){
  size(500, 500);
  background(255);
  noStroke();
  color c1 = color(255, 140, 0);
  color c2 = color(0, 255, 255);
  for(float d = 400; d > 0; d -= 5){
    color c = lerpColor(c1, c2, d / 400.0);
    fill(c);
    ellipse(width / 2, height / 2, d, d);
  }
}

lerpColor()のリファレンスはこちら。

lerpColor() \ Language (API) \ Processing 2+