处理:对形状进行分层时,Alpha停止增加

时间:2018-12-09 19:41:37

标签: processing transparency alpha

我正在处理,试图产生“发光”效果。 我计算出如果我在彼此的顶部放置255个同心圆,每个同心圆的alpha = 1,那么中心应该具有alpha = 255,而外部应该具有alpha = 1;

void setup()
{
  size(800, 800);
}

void draw()
{
  noStroke();
  background(0);
  translate(width/2, height/2);

  //Red Circle behind glow
  fill(255, 0, 0, 255);
  ellipse(0, 0, 10, 10);

  //Create glow circles
  for (int i=0; i<255; i++)
   {
     fill(255, 1);
     ellipse(0,0,i,i);
   }
}

This is the result。 在128 alpha处有明显的分度,在添加更多的圆圈后它似乎停止增加。

使用不同的混合类型似乎也无法解决该问题。

要使它正常工作,我是否缺少某些明显的东西?

1 个答案:

答案 0 :(得分:0)

通过堆叠圆圈,您必须将所有先前的alpha乘以而不是总和。

具有50%alpha的圆圈显示背景的50%。如果您添加第二个具有50%alpha的圆圈,则它会显示下面的50%,这是第一个圆圈,在背景之下。最终结果是50%* 50%= 25%背景。

这意味着您绘制的最后一个圆仍具有alpha = 1,并且它显示了下面所有内容的99%。这与alpha = 255不同。

那还是理论。我真的无法解释为什么它会达到128,我测试了一些东西,在我看来这是处理过程中特有的。

获得所需效果的解决方案是这样的:

for (int i=128; i>0; i--)
  {
    fill(255, 255, 255, 1);
    ellipse(0, 250, i*2, i*2);
  }

如果您想使其更亮,则可以增加Alpha,但是“环形”伪像将开始显示。