![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#16
|
|||
|
|||
![]() Цитата:
![]() Я ни в чем никогда не уверен... И в этом тоже... ![]() |
#17
|
||||
|
||||
![]() Цитата:
![]() |
#18
|
|||
|
|||
![]() В том то и вся загвоздка, что это идеи. А реализацию придамать пока не получается.
P.S. Ну так мне писать свои идеи или нет? |
#19
|
|||
|
|||
![]() есть алгоритм на C++, попробую переписать на делфи, потом выложу. Еще есть огонь с использованием DirectDraw, написан на API.
|
#20
|
|||
|
|||
![]() Ну так вот. Я предлагаю пирамидный алгоритм. Суть в том, что огонь строится при помощи пирамиды и её изменения:
![]() изначальная пирамида Например, чтобы показать свечу мы будем использовать двойную пирамиду. Вторая пирамида будет меньше, даже немного меньше, чем на рисунке (для удобства верхний ряд ораньжевый, а нижний розовый): ![]() Но это неслишком похоже на реальное изображение (рис 3), поэтому в конце рендинга (рендинг - визуализация) мы вытяним наше изображение в том случае, если это понадобится. ![]() рис 3. Натуральная свеча. Про раскраску пламени я пока писать ничего не буду. Обратите внимание, что на первых двух картинках, изображающих огонь, сделанный при помощи компьютера, видна очень сильная пиксилезация. Поэтому в программах количество рядов будет намного больше. Ну так вот, что касается поведения огня. Здесь самое сложное. Посмотрите, как изменяется изображение, если на него дусть из небольшого отверстия, радиусом где то 2,2 мм. Замечание - относительно текущего положения картинки, на огонь дули слева, причём дули почти без откланений по высоте (насколько это было возможным)(рис 5). ![]() рис 5. Характер изменения пламени свечи. Предлагается (мною, разумеется) использовать смещение (ротация по градусам) с затуханием. Мы будем поворачивать ряды, на которое воздействует некая сила. Вопрос только в том, на какую величину Smx, зависящую от силы и позиции данной точки (т. е. для каждой точки отдельно) поворачивать по оси X, на какую величину Smy, зависящую от силы и позиции данной точки (т. е. для каждой точки отдельно) поворачивать по оси Y, какие точки, заложенные в масив k, тушить (неотображать). Конечно, графическая часть алгоритма может быть построена и на стандартном в Delphi классе Tcanvas, и отправлена прямо в видео память, или используя библеотеку DirectX, либо OpenGL, либо вообще третию графическую библеотеку. Но я лично умею работать только с Tcanvas(будет мерцать), могу отправить напрямую в видеопамять, но это долго и муторно, и могу использовать OpenGL. Последний вариант мне больше всего нравится, вот я и буду использовать его. Я набросал недоделанное приложение, может вы доделаете (или я, но попоже). Короче вот http://ifolder.ru/10059234 * статья дописывалась бы, если бы мне больше приходило мыслей в голову. v1.2 Последний раз редактировалось DungeonLords, 20.01.2009 в 13:00. |