evg
Разбор демо-эффекта "Огонь"

Эффект "Огонь" является частным случаем блюра(размытия) на определенной палитре цветов.

Старт | Стоп
Палитра №1 | Палитра №2

Для создания огня необходимо создать палитру цветовых переходов пламени. Т.е. например переходы вида: белый->желтый->красный->черный.
Вот два примера 256-цветных палитр.

Палитра №1Палитра №2

Теперь необходимо подкинуть дровишек. :)
В последнюю строку мы рандомно генерируем точки максимальной, или около того, яркости. Этим мы задаем начальные значения для блюра. А также регулируем интенсивность пламени.

Далее усредняем значения четырех точек по всему полю. Используем матрицу вида:

000
010
111
В этой матрице центральная точка - текущая точка экрана, остальные соответственно точки расположенные вокруг текущей точки.
Для получения различных видов огней можно менять эту матрицу с добавлением различных весовых коэффицентов и усредняемых точек.

fire[i] = 
      (fire[i] + 
       fire[i + (SCREEN_WIDTH + 1)] + 
       fire[i + (SCREEN_WIDTH - 1)] + 
       fire[i +  SCREEN_WIDTH]) / 4;
После усреднения, делаем затухание пламени. Просто уменьшаем значение цвета. fire[i] -= 1;
Этим числом регулируется скорость затухания пламени, чем больше число, тем "живее" будет пламя.

Вот в моей более ранней статье можно посмотреть применение эффекта огня к 3д фигурке. Статья про что-то...

Коментарии