Обработка: увеличение уровня альфа при наложении фигур - PullRequest
0 голосов
/ 09 декабря 2018

Я работаю с обработкой, пытаюсь создать эффект свечения.Я подумал, что если я наложу 255 концентрических кругов поверх друг друга, каждый с альфа = 1, то центр должен иметь альфа = 255, в то время как снаружи должно быть альфа = 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);
   }
}

Эторезультат .Существует четкое деление на 128 альфа, которое, по-видимому, перестает увеличиваться при добавлении большего количества кругов.

Использование разных типов смесей также не решает проблему.

Есть ли что-то очевидное, чего мне не хватает, чтобы заставить это работать?

1 Ответ

0 голосов
/ 09 декабря 2018

Складывая круги, вы должны умножить все предыдущие альфы, а не суммировать их в целом.

Круг с 50% альфа показывает 50% фона.Если вы добавите второй круг с 50% альфа, он покажет 50% того, что ниже, то есть первый круг и ниже этого фона.Окончательный результат - 50% * 50% = 25% фона.

Это означает, что последний нарисованный круг все еще имеет альфа = 1, и он показывает 99% всего, что находится под ним.Это не то же самое, что альфа = 255.

В любом случае, это теория.Я не могу объяснить, почему он достигает максимума в 128, я протестировал несколько вещей, и мне кажется, что это что-то особенное под капотом обработки.

Решение получить желаемый эффект - это нечтокак это:

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

Если вы хотите, чтобы оно было ярче, вы можете увеличить альфа, но артефакты «кольца» начнут отображаться.

...