Другие языки программирования и технологии

Посоветуйте алгоритм горящего пламени. точнее нужно описание. желательно пламя по реалистичней...

Простейший вариант выглядит примерно так:

1) Очищаем буфер (делаем в памяти картинку и заливаем её цветом $000000 - black) и создаём единый индекс цветов в 766 значения (от 0 = $000000 до 255 = $FF0000 - увеличивая только красную составляющую, далее от 256 = $FF0100 до 511 = $FFFF00 - увеличивая только зелёную составляющую, и наконец от 512 = $FFFF01 до 765 = $FFFFFF - увеличивая только синию составляющую)

2) Случайным образом в самой нижней строке выводим несколько "белых" точек $FFFFFF (подбирается опытным путём)

3) В цикле (сверху вниз) просматриваем все ячейки буфера и для каждой находим четверть суммы Index = (buf[Row, Col] + buf[Row + 1, Col - 1] + buf[Row + 1, Col] + buf[Row + 1, Col + 1]) div 4

4) По полученному значению из индекса получаем значение цвета и устанавливаем в текущие координаты Row x Col

5) Выводим буфер на канву и переходим к (2)

Если хорошо оптимизировать данные действия (прямая запись в изображение в буфере, кэширование, ассемблер) , то можно получить довольно-таки динамичное отображение, которое будет походить на горящий огонь.

Далее можно накладывать изображение из буфера на изображение снимка экрана или загруженной картинки по ХOR... Но это уже тогда, когда основной алгоритм будет работать с частотой примерно 25 кадров в секунду!
Михаил Липка
Михаил Липка
51 324
Лучший ответ
Виктор Онищенко спасибо. вот как раз почти так я и делал. единственное я заполнял по случайному закону не белым цветом а случайным т е в диапазоне от 0 до 255.

не очень реалистичное было пламя. тогдадобавил проверку. если вычисленная точка одинаковой яркости с нижней то присваиваю ей значение ноль. пламя получилось более реалистично.

как еще можно изменить?
К сожаление алгоритм горящего пламени недоступен по идейным соображениям. Вас устроит алгоритм просто пламени, или потухшего пламени? Опишите техзадачу для точного решения. А то вот уже полкоробка спичек исчиркал-а что то не понимаю о чем речь
Простое пламя - случайные числа снизу + хитрое сглаживание
Сложное фотореалистичное пламя - 3д анимированная модель, которая не может быть простой.
Виктор Онищенко вообще меня устроит простое. но где о нем почитать?

я делал так
1 заполнял нижнюю строку массива случайными значениями от 0 до 255 (255 это максимальная яркость точки)
2 заполнял следующую строку сумируя значения соседних точек и разделяя на их количество и т д

пламя сильно ровное и спокойное. тогда я добавил в формулу проверку если вычисленная точка совпадает с нижней то она равна нулю.
в результате оно стало более похоже. но все же не то

может еще какие есть варианты?

да а еще мне желательно почитать и о 3д математической модели пламени. если есть где описание то поделитесь пожалуйста
Думаю лучше тебе посмотреть видео в замедленной съёмке.
Рома Закиев
Рома Закиев
5 805

Похожие вопросы