Эффект "Огонь" является частным случаем блюра(размытия) на определенной палитре цветов.
Палитра №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д фигурке. Статья про что-то...