PDA

Просмотр полной версии : Плазма и прочие по-пиксельные эффекты.



ALKO
23.11.2016, 09:25
Разрабатываю демосцену (только не на спектрум, а на сегу), но суть фактически та же. Даже несколько проще.
Хотелось бы реализовать там всякие растровые эффекты наподобие плазмы, может там 3д-туннель, что ещё модно в демках.
В по-пиксельном выводе сежка тугодумит. В бенчмарке рендерит тонированный кубик со светотенью стабильно 20 фпс. И в прочих демках с векторно-полигональной графикой выше 20 фпс не поднимается. Блитинг данных довольно ресурсоёмкий.
Зато в чанковой (тайловой) графике ультра-быстрая.

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

Ради чего, собственно, создал тему. Нужны исходники на языках высокого уровня (не асм). Можно и бейсик-подобные. Со структурой {алгоритм->(X,Y); PutPixel(X,Y)}.

Destr
24.11.2016, 20:10
Плазма и прочие по-пиксельные эффекты
Если не асм, то делать как все белые люди - через матрицы. 80% этих плазм, огней, воды и прочего делаются через них. Грызи математику. Поначалу страшно, потом ничего, становится понятней как это работает.

JV-Soft
24.11.2016, 23:06
ALKO, Рисование фрактала на ZX басике могу дать, если надо, point как раз.

Hacker VBI
25.11.2016, 11:53
ALKO, гуглю за тебя:
demo-effects/download (https://sourceforge.net/projects/demo-effects/files/latest/download)
The_Art_of_Demomaking-Issue_04_Per_Pixel_Control.shtml (http://www.flipcode.com/archives/The_Art_of_Demomaking-Issue_04_Per_Pixel_Control.shtml)
demoz/demoeng (http://josh83.pagesperso-orange.fr/demoz/demoeng.htm)

ALKO
29.11.2016, 23:44
Не понимаю, как настроить эту формулу (из второй ссылки) под нужное разрешение и кол-во цветов.
Допустим у меня ща 100*100 пикселей и 16 цветов на пиксель.

64 + 63 * sin( i/(37+15*cos(j/74)) ) * cos( j/(31+11*sin(i/57)))

По-всякому экспериментировал, получаются или полосочки, или вообще эррор - деление на 0.

ALKO
01.12.2016, 11:58
ап...

Hacker VBI
01.12.2016, 12:58
ALKO, формула считает цвет текущей точки, так?
offset = 0;
for (j=0; j<YMAX; j++)
{
for (i=0; i<XMAX; i++)
{
video_memory[ offset ] = plasma_function1( x+i, y+j );
offset++;
}
}
YMAX - высота изображения, XMAX - ширина, думаю понятно
video_memory[ offset ] должен правильно высчитывать положение на экране, здесь у тебя и траблы.
если у тебя putpixel (i,j,color) - то всё проще ;)

plasma_function1 - здесь как раз расчёт цвета.
цвет &15 - получишь цвета в пределах 0-15

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

Reobne
01.12.2016, 15:38
ALKO, 64 + 63 * sin( i/(37+15*cos(j/74)) ) * cos( j/(31+11*sin(i/57)))
64 плюс-минус 63 дадут нам от 1 до 127(а синусы и косинусы дают нам от -1 до 1), тебе надо от 0 до 15.
попробуй
7.5 + 7.9 * sin( i/(37+15*cos(j/74)) ) * cos( j/(31+11*sin(i/57))) (для округления до ближайшего целого)
либо
8 + 7.9 * sin( i/(37+15*cos(j/74)) ) * cos( j/(31+11*sin(i/57))) (для округления отбрасыванием дробной части)

Shiny
19.01.2017, 07:57
Зачем давать ссылки, где информация неточная?
плазма с исходниками
https://yadi.sk/d/hDUOvbFW39kaE2
Точечный тоннель:
https://yadi.sk/d/qMQMEZ3k39kjG9