为什么带有alpha的Processing`fill()`永远不会完全填充?

j6m*_*6m8 5 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);
}
Run Code Online (Sandbox Code Playgroud)

即使在"永远等待"之后,白色50x50矩形仍然可见,尽管已经褪色.为什么不fill(0, 2)最终掩盖这个?

我想这个问题是双重的:

  • 为什么它最终不会褪色为黑色,因为为什么在白色顶部绘制另一个黑色矩形而不是最终消除它(我正在考虑将有色窗户放在彼此之间的线条;最终甚至是最亮的光线赢了通过),和
  • 为什么它最终不会消失为黑色,因为为什么这是Processing社区的行为?

Kev*_*man 3

这是一篇解释发生了什么的帖子:http://processing.org/discourse/beta/num_1138703939.html

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

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