Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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 |
|
Вернуться к началу |
|
 |
numerouno
Зарегистрирован: 04.09.2011 Сообщения: 390
|
Добавлено: Чт Сен 29, 2011 06:56 Заголовок сообщения: |
|
|
скриншот бы, чтоп заценить плазму.. _________________ вначале было крактро, а потом такое началось,когда праникся дэмоспиритом апасля вайнспирита!1
Аднажды на ДемосценеРупоявился невежа. его с позором прогнали. Так появились тролли.
миниатюры 256bytes.net в одном флаконе
Я программист, Зип Файл! |
|
Вернуться к началу |
|
 |
BiTL DOS lover

Зарегистрирован: 22.09.2007 Сообщения: 2950
|
Добавлено: Чт Сен 29, 2011 10:26 Заголовок сообщения: |
|
|
numerouno писал(а): | скриншот бы, чтоп заценить плазму.. |
так качни Pixilang. |
|
Вернуться к началу |
|
 |
NightRadio
Зарегистрирован: 25.09.2007 Сообщения: 213
|
Добавлено: Чт Сен 29, 2011 10:44 Заголовок сообщения: |
|
|
 |
|
Вернуться к началу |
|
 |
BiTL DOS lover

Зарегистрирован: 22.09.2007 Сообщения: 2950
|
|
Вернуться к началу |
|
 |
numerouno
Зарегистрирован: 04.09.2011 Сообщения: 390
|
Добавлено: Чт Сен 29, 2011 12:23 Заголовок сообщения: |
|
|
Ха! а что не на Processing?  _________________ вначале было крактро, а потом такое началось,когда праникся дэмоспиритом апасля вайнспирита!1
Аднажды на ДемосценеРупоявился невежа. его с позором прогнали. Так появились тролли.
миниатюры 256bytes.net в одном флаконе
Я программист, Зип Файл! |
|
Вернуться к началу |
|
 |
BiTL DOS lover

Зарегистрирован: 22.09.2007 Сообщения: 2950
|
Добавлено: Чт Сен 29, 2011 12:46 Заголовок сообщения: |
|
|
numerouno писал(а): |
Ха! а что не на Processing?  |
Топик о Пиксилэнге. |
|
Вернуться к началу |
|
 |
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 |
 |
|
Вернуться к началу |
|
 |
numerouno
Зарегистрирован: 04.09.2011 Сообщения: 390
|
Добавлено: Чт Сен 29, 2011 14:30 Заголовок сообщения: |
|
|
о уж0с!!111 что вы сделали с зумером!!111 _________________ вначале было крактро, а потом такое началось,когда праникся дэмоспиритом апасля вайнспирита!1
Аднажды на ДемосценеРупоявился невежа. его с позором прогнали. Так появились тролли.
миниатюры 256bytes.net в одном флаконе
Я программист, Зип Файл! |
|
Вернуться к началу |
|
 |
NightRadio
Зарегистрирован: 25.09.2007 Сообщения: 213
|
Добавлено: Чт Сен 29, 2011 15:00 Заголовок сообщения: |
|
|
Цитата: | что вы сделали с зумером |
Ну скорее просто зумер получился бесконечный ) |
|
Вернуться к началу |
|
 |
numerouno
Зарегистрирован: 04.09.2011 Сообщения: 390
|
Добавлено: Чт Сен 29, 2011 17:26 Заголовок сообщения: |
|
|
NightRadio писал(а): | Цитата: | что вы сделали с зумером |
Ну скорее просто зумер получился бесконечный ) |
"Дешевая китайская подделка"(с)КВН _________________ вначале было крактро, а потом такое началось,когда праникся дэмоспиритом апасля вайнспирита!1
Аднажды на ДемосценеРупоявился невежа. его с позором прогнали. Так появились тролли.
миниатюры 256bytes.net в одном флаконе
Я программист, Зип Файл! |
|
Вернуться к началу |
|
 |
BiTL DOS lover

Зарегистрирован: 22.09.2007 Сообщения: 2950
|
Добавлено: Чт Сен 29, 2011 20:39 Заголовок сообщения: |
|
|
numerouno писал(а): | NightRadio писал(а): | Цитата: | что вы сделали с зумером |
Ну скорее просто зумер получился бесконечный ) |
"Дешевая китайская подделка"(с)КВН |
Ну канеш, все должны с точностью подделывать древний амижный эффект. Остальное не считается. |
|
Вернуться к началу |
|
 |
numerouno
Зарегистрирован: 04.09.2011 Сообщения: 390
|
Добавлено: Чт Сен 29, 2011 21:48 Заголовок сообщения: |
|
|
BiTL писал(а): | numerouno писал(а): | NightRadio писал(а): | Цитата: | что вы сделали с зумером |
Ну скорее просто зумер получился бесконечный ) |
"Дешевая китайская подделка"(с)КВН |
Ну канеш, все должны с точностью подделывать древний амижный эффект. Остальное не считается. |
ога, chaoszoomer из беспантовой Final Reality  _________________ вначале было крактро, а потом такое началось,когда праникся дэмоспиритом апасля вайнспирита!1
Аднажды на ДемосценеРупоявился невежа. его с позором прогнали. Так появились тролли.
миниатюры 256bytes.net в одном флаконе
Я программист, Зип Файл! |
|
Вернуться к началу |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|