【问题标题】:Alpha Interfering With Smooth Color Spectrum - ProcessingAlpha 干扰平滑色谱 - 处理
【发布时间】:2016-09-26 19:32:24
【问题描述】:

我正在尝试创建一个从草图开始淡入的色谱。为此,我只需设置 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);
  }
}

输出图片:

【问题讨论】:

    标签: colors processing


    【解决方案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);
      }  
    }
    

    【讨论】:

    • 谢谢你的解释,我明白现在发生了什么!
    • @SorenLantz 没问题。这是一个有趣的问题。肯定让我挠了几分钟!
    猜你喜欢
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多