www.demoscene.ruenglish version
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация   ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Plasma на Pixilang 3.0

 
Начать новую тему   Ответить на тему    Список форумов Demoscene.Ru -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
NightRadio



Зарегистрирован: 25.09.2007
Сообщения: 213


СообщениеДобавлено: Ср Сен 28, 2011 21:21    Заголовок сообщения: Plasma на Pixilang 3.0 Ответить с цитатой

Для тех, кого заинтересовал язык программирования Pixilang, расскажу о некоторых особенностях новой версии на примере эффекта плазмы.

В предыдущей версии Pixilang 1.6 это делалось по аналогии с другими языками - то есть, в лоб, вычисляя цвета пикселей в цикле. Но так как pixi-программа не компилируется в машинный код, встроенная виртуальная машина довольно сильно тормозила на слабых устройствах.

В версии 3.0 я добавил специальные функции для генерации и обработки массивов (pixi-контейнеров). Например, функция generator() генерирует 1D или 2D сигнал с указанными параметрами (фаза, амплитуда, дельта фазы, типы волны: синус, быстрый синус, шум). А функция op_ccn() выполняет математическую операцию над несколькими 1D или 2D контейнерами.

Используя вышеописанные функции по следующему алгоритму можно нарисовать плазму. Создаем два 8-битных 2D контейнера. Оба заполняем значениями 8-битного синуса с разными параметрами через generator(). Далее два этих контейнера перемножаем (с последующим делением) при помощи op_ccn(). Результат превращаем в картинку используя функцию replace_values(), которая заменяет 8-битные значения на цвета из палитры. Палитра - это отдельный 1D контейнер с 256 значениями цветов.

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

Код:
start_timer( 0 )

palette = new( 256 )
i = 0 while( i < 128 )
{
    v = i
    v * 2
    palette[ i ] = get_color( v / 8, v, v / 2 )
    i + 1
}

i = 128 while( i < 256 )
{
    v = 256 - i
    v * 2
    palette[ i ] = get_color( v, v / 4, v / 2 )
    i + 1
}

scr = get_screen()
img1 = new( get_xsize( scr ), get_ysize( scr ), INT8 )
img2 = clone( img1 )

while( 1 )
{
    t = get_timer( 0 ) / 1000

    clear()

    generator( OP_SIN8, img1, t, 128, cos( t / 2 ) / 53, cos( t / 4 ) / 44 )
    generator( OP_SIN8, img2, t / 2, 128, sin( t / 3 ) / 50, sin( t / 3 ) / 48 )
    op_ccn( OP_MUL_DIV, img1, img2, 128 )
    generator( OP_SIN8, img2, t / 3, 128, cos( t / 4 ) / 23, sin( t / 5 ) / 88 )
    op_ccn( OP_MUL_DIV, img1, img2, 128 / 2 )
    replace_values( scr, img1, palette )

    ts = ""
    sprintf( ts, "FPS:%u", FPS )
    print( ts, -get_xsize( scr ) / 2 + 8, -get_ysize( scr ) / 2 + 8, WHITE, TOP | LEFT )

    while( get_event() ) { if EVT[ EVT_TYPE ] == EVT_QUIT { halt } }

    frame()
}


В итоге программа более-менее шустро работает даже на стареньком наладоннике с Windows CE.

Подробную документацию по языку можно почитать здесь: http://code.google.com/p/pixilang/wiki/PixilangV3Manual_RU
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
numerouno



Зарегистрирован: 04.09.2011
Сообщения: 390


СообщениеДобавлено: Чт Сен 29, 2011 06:56    Заголовок сообщения: Ответить с цитатой

скриншот бы, чтоп заценить плазму..
_________________
вначале было крактро, а потом такое началось,когда праникся дэмоспиритом апасля вайнспирита!1
Аднажды на ДемосценеРупоявился невежа. его с позором прогнали. Так появились тролли.
миниатюры 256bytes.net в одном флаконе
Я программист, Зип Файл!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
BiTL
DOS lover


Зарегистрирован: 22.09.2007
Сообщения: 2940


СообщениеДобавлено: Чт Сен 29, 2011 10:26    Заголовок сообщения: Ответить с цитатой

numerouno писал(а):
скриншот бы, чтоп заценить плазму..


так качни Pixilang.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
NightRadio



Зарегистрирован: 25.09.2007
Сообщения: 213


СообщениеДобавлено: Чт Сен 29, 2011 10:44    Заголовок сообщения: Ответить с цитатой

Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
BiTL
DOS lover


Зарегистрирован: 22.09.2007
Сообщения: 2940


СообщениеДобавлено: Чт Сен 29, 2011 11:55    Заголовок сообщения: Ответить с цитатой

Реквестирую ротозумер на Pixilang'e Wink http://www.bel.fi/~alankila/rotzoomer.html


Ещё можно дирфакционную плазму запилить http://www.bel.fi/~alankila/plasma.html
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
numerouno



Зарегистрирован: 04.09.2011
Сообщения: 390


СообщениеДобавлено: Чт Сен 29, 2011 12:23    Заголовок сообщения: Ответить с цитатой

BiTL писал(а):
Реквестирую ротозумер на Pixilang'e Wink http://www.bel.fi/~alankila/rotzoomer.html


Ещё можно дирфакционную плазму запилить http://www.bel.fi/~alankila/plasma.html


Ха! а что не на Processing? Rolling Eyes
_________________
вначале было крактро, а потом такое началось,когда праникся дэмоспиритом апасля вайнспирита!1
Аднажды на ДемосценеРупоявился невежа. его с позором прогнали. Так появились тролли.
миниатюры 256bytes.net в одном флаконе
Я программист, Зип Файл!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
BiTL
DOS lover


Зарегистрирован: 22.09.2007
Сообщения: 2940


СообщениеДобавлено: Чт Сен 29, 2011 12:46    Заголовок сообщения: Ответить с цитатой

numerouno писал(а):
BiTL писал(а):
Реквестирую ротозумер на Pixilang'e Wink http://www.bel.fi/~alankila/rotzoomer.html


Ещё можно дирфакционную плазму запилить http://www.bel.fi/~alankila/plasma.html


Ха! а что не на Processing? Rolling Eyes


Топик о Пиксилэнге.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
NightRadio



Зарегистрирован: 25.09.2007
Сообщения: 213


СообщениеДобавлено: Чт Сен 29, 2011 12:59    Заголовок сообщения: Ответить с цитатой

Цитата:
Реквестирую ротозумер

Не совсем то, что по ссылке, но тоже любопытно получилось :)
Цитата:
scr1 = get_screen()
scr2 = clone( scr1 )

clear( BLACK )

start:

t_scale( 1.02, 1.02, 1 )
t_rotate( 1, 0, 0, 1 )
pixi( scr2, ( rand() & 3 ) - 1, ( rand() & 3 ) - 1 )
t_reset()
r = rand() & 255
g = rand() & 255
b = rand() & 255
x = ( rand() & 15 ) - 7
y = ( rand() & 15 ) - 7
s = 1
fbox( x, y, s, s, get_color( r, g, b ) )

frame()

t = scr1
scr1 = scr2
scr2 = t
set_screen( scr1 )

while( get_event() ) { if EVT[ EVT_TYPE ] == EVT_QUIT { halt } }

go start

Цитата:
scr1 = get_screen()
scr2 = clone( scr1 )

clear( BLACK )

start:

t_scale( 1.1, 1.1, 1 )
t_rotate( 0 + (rand()&3)-1, 0, 0, 1 )
x = ( rand() & 3 ) - 1
y = ( rand() & 3 ) - 1
pixi( scr2, 0, 0 )
t_reset()
x = ( rand() & 15 ) - 7
y = ( rand() & 15 ) - 7
r = rand() & 255
g = rand() & 255
b = rand() & 255
c = get_color( r, g, b )
s = 1
fbox( x, y, s, s, c )

frame()

t = scr1
scr1 = scr2
scr2 = t
set_screen( scr1 )

while( get_event() ) { if EVT[ EVT_TYPE ] == EVT_QUIT { halt } }

go start

Цитата:
scr1 = get_screen()
scr2 = clone( scr1 )

clear( BLACK )

start:

transp( 230 )
t_scale( 1.1, 1.1, 1 )
t_rotate( 0 + (rand()&3)-1, 0, 0, 1 )
x = ( rand() & 3 ) - 1
y = ( rand() & 3 ) - 1
pixi( scr2, 0, 0 )
t_reset()
transp( 256 )
x = ( rand() & 15 ) - 7
y = ( rand() & 15 ) - 7
r = rand() & 255
g = rand() & 255
b = rand() & 255
c = get_color( r, g, b )
s = 1
fbox( x, y, s, s, c )

frame()

t = scr1
scr1 = scr2
scr2 = t
set_screen( scr1 )

while( get_event() ) { if EVT[ EVT_TYPE ] == EVT_QUIT { halt } }

go start

Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
numerouno



Зарегистрирован: 04.09.2011
Сообщения: 390


СообщениеДобавлено: Чт Сен 29, 2011 14:30    Заголовок сообщения: Ответить с цитатой

о уж0с!!111 что вы сделали с зумером!!111
_________________
вначале было крактро, а потом такое началось,когда праникся дэмоспиритом апасля вайнспирита!1
Аднажды на ДемосценеРупоявился невежа. его с позором прогнали. Так появились тролли.
миниатюры 256bytes.net в одном флаконе
Я программист, Зип Файл!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
NightRadio



Зарегистрирован: 25.09.2007
Сообщения: 213


СообщениеДобавлено: Чт Сен 29, 2011 15:00    Заголовок сообщения: Ответить с цитатой

Цитата:
что вы сделали с зумером

Ну скорее просто зумер получился бесконечный )
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
numerouno



Зарегистрирован: 04.09.2011
Сообщения: 390


СообщениеДобавлено: Чт Сен 29, 2011 17:26    Заголовок сообщения: Ответить с цитатой

NightRadio писал(а):
Цитата:
что вы сделали с зумером

Ну скорее просто зумер получился бесконечный )

"Дешевая китайская подделка"(с)КВН
_________________
вначале было крактро, а потом такое началось,когда праникся дэмоспиритом апасля вайнспирита!1
Аднажды на ДемосценеРупоявился невежа. его с позором прогнали. Так появились тролли.
миниатюры 256bytes.net в одном флаконе
Я программист, Зип Файл!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
BiTL
DOS lover


Зарегистрирован: 22.09.2007
Сообщения: 2940


СообщениеДобавлено: Чт Сен 29, 2011 20:39    Заголовок сообщения: Ответить с цитатой

numerouno писал(а):
NightRadio писал(а):
Цитата:
что вы сделали с зумером

Ну скорее просто зумер получился бесконечный )

"Дешевая китайская подделка"(с)КВН


Ну канеш, все должны с точностью подделывать древний амижный эффект. Остальное не считается.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
numerouno



Зарегистрирован: 04.09.2011
Сообщения: 390


СообщениеДобавлено: Чт Сен 29, 2011 21:48    Заголовок сообщения: Ответить с цитатой

BiTL писал(а):
numerouno писал(а):
NightRadio писал(а):
Цитата:
что вы сделали с зумером

Ну скорее просто зумер получился бесконечный )

"Дешевая китайская подделка"(с)КВН


Ну канеш, все должны с точностью подделывать древний амижный эффект. Остальное не считается.

ога, chaoszoomer из беспантовой Final Reality Cool
_________________
вначале было крактро, а потом такое началось,когда праникся дэмоспиритом апасля вайнспирита!1
Аднажды на ДемосценеРупоявился невежа. его с позором прогнали. Так появились тролли.
миниатюры 256bytes.net в одном флаконе
Я программист, Зип Файл!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Demoscene.Ru -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах