Alpha 干扰平滑的色谱 - 处理

Alpha Interfering With Smooth Color Spectrum - Processing

我正在尝试创建一个从草图开始逐渐淡入的色谱。为此,我只需设置 colorMode(HSB, 255),然后使用 stroke(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);
  }
}

输出图片:

发生这种情况是因为您在透明之上绘制透明。

这没有将目标颜色绘制得越来越深的效果。它具有收敛到纯色的效果。我无法解释:透明颜色 添加 ,因此多个值将集中在相同的颜色上。

要点是:您不应在透明度之上绘制透明度,而应调用 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);
  }  
}