我正在处理,试图产生“发光”效果。 我计算出如果我在彼此的顶部放置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处有明显的分度,在添加更多的圆圈后它似乎停止增加。
使用不同的混合类型似乎也无法解决该问题。
要使它正常工作,我是否缺少某些明显的东西?
答案 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,但是“环形”伪像将开始显示。