Alpha干涉与平滑的色谱 - 处理

时间:2016-09-26 19:32:24

标签: colors processing

我正在尝试创建一个从草图开始淡入的色谱。为此,我只需设置colorMode(HSB,255),然后用笔划绘制线条(map(x,0,width,0,255),255,255,5),并且不进行背景清除。 5的alpha建立在自身之上并最终创建一个固体光谱。然而,光谱被分解成颜色块,而不是平滑过渡。我测试了没有alpha的程序,它产生了一个平滑的光谱,所以这是因为alpha值。

为什么会发生这种情况,我该如何解决?

完整代码:

void setup(){
  size(500, 500);
  colorMode(HSB, 255);
}
void draw(){
  for(int x = 0; x < width; x++){
    stroke(map(x, 0, width, 0, 255), 255, 255, 5);
    line(x,0,x,height);
  }
}

输出图片:unwanted output

1 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为您在透明度的基础上在透明度之上绘制透明度。

这不会产生将目标颜色绘制得更暗和更暗的效果。它具有会聚到纯色的效果。我无法解释这一点:透明色是添加,因此多个值会聚合在同一种颜色上。

重点是:不应在透明度上绘制透明度,而应调用background()函数清除旧颜色,然后使用增加的alpha值重绘颜色。这是一个例子:

void setup() {
  size(500, 500);
  colorMode(HSB, 255);

}
void draw() {

  float alpha = constrain(frameCount, 0, 255);

  background(200);

  for (int x = 0; x < width; x++) {
    stroke(map(x, 0, width, 0, 255), 255, 255, alpha);
    line(x, 0, x, height);
  }  
}

color spectrum