Processing 为什么alpha的“fill()”处理永远不会完全填充?

Processing 为什么alpha的“fill()”处理永远不会完全填充?,processing,Processing,假设我们有以下代码: void setup() { background(0); size(200, 200); fill(255); rect(75, 75, 50, 50); } void draw() { fill(0, 2); rect(0, 0, width, height); } 即使在“永远”等待之后,50x50的白色矩形仍然可见,尽管已经褪色。为什么填充(0,2)最终不能掩盖这一点 我认为这个问题有两个方面:

假设我们有以下代码:

void setup() {
    background(0);
    size(200, 200);
    fill(255);        
    rect(75, 75, 50, 50);
}  

void draw() {
    fill(0, 2);
    rect(0, 0, width, height);
}
即使在“永远”等待之后,50x50的白色矩形仍然可见,尽管已经褪色。为什么
填充(0,2)
最终不能掩盖这一点

我认为这个问题有两个方面:

  • 为什么它最终不会褪色为黑色,就像为什么在白色矩形上绘制另一个黑色矩形最终不会将其擦除一样(我的想法是将有色窗口相互覆盖;最终即使最亮的光线也不会穿透),以及
  • 为什么它最终不会褪色为黑色,因为为什么这是处理社区想要的行为

默认背景色比指定给第一个矩形的颜色暗,因此它会很快变黑

  • 为什么它最终不会褪色为黑色,就像为什么在白色矩形的顶部绘制另一个黑色矩形最终不会将其擦除一样 (我的想法是在每个窗户上都装上有色的窗户 其他;最终即使是最亮的光也无法穿透),以及
  • 为什么它最终不会褪色为黑色,因为为什么这是处理社区想要的行为

另外,在您的原始代码(不是上面的示例)中,您可能正在连续绘制白色矩形,因此它永远不会褪色。

下面是一篇文章,解释发生了什么:

基本上,问题在于处理将颜色存储为整数,但采用浮点参数。组合颜色时,处理将浮点舍入为整数。在您的例子中,您的颜色被卡在63、63、63的值上,因为在这一点上,混合太轻微,无法产生舍入后可以检测到的差异


解决方案是从源位置淡出,而不是在顶部覆盖alpha颜色。

请注意
设置()中的
rect
为白色;连续绘制的是带有alpha值的黑色。此外,我在我的
设置()中将背景设置为黑色,因此它与默认值无关。您是否可以扩展一下从源代码淡出的含义?我假设你的意思是用手触摸
像素
阵列?基本上,大多数草图每次都是从头开始绘制。这意味着您应该重新绘制背景,然后根据草图运行的时间计算矩形的暗度(或者是否应该绘制),并根据该计算绘制矩形。