Разбор демо-эффекта "Огонь"
Эффект "Огонь" является частным случаем блюра(размытия) на определенной палитре цветов.
Палитра №1 | Палитра №2
Для создания огня необходимо создать палитру цветовых переходов пламени.
Т.е. например переходы вида: белый->желтый->красный->черный.
Вот два примера 256-цветных палитр.
| Палитра №1 | Палитра №2 |
Теперь необходимо подкинуть дровишек. :)
В последнюю строку мы рандомно генерируем точки максимальной, или около того, яркости.
Этим мы задаем начальные значения для блюра. А также регулируем интенсивность пламени.
Далее усредняем значения четырех точек по всему полю. Используем матрицу вида:
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 1 | 1 |
Для получения различных видов огней можно менять эту матрицу с добавлением различных весовых коэффицентов и усредняемых точек.
fire[i] =
(fire[i] +
fire[i + (SCREEN_WIDTH + 1)] +
fire[i + (SCREEN_WIDTH - 1)] +
fire[i + SCREEN_WIDTH]) / 4;
После усреднения, делаем затухание пламени. Просто уменьшаем значение цвета.
fire[i] -= 1;Этим числом регулируется скорость затухания пламени, чем больше число, тем "живее" будет пламя.
Вот в моей более ранней статье можно посмотреть применение эффекта огня к 3д фигурке. Статья про что-то...