www.demoscene.ruenglish version
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация   ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Forth Haiku
На страницу Пред.  1, 2, 3, 4, 5, 6 ... 19, 20, 21  След.
 
Начать новую тему   Ответить на тему    Список форумов DemoScene.Ru -> Демо
Предыдущая тема :: Следующая тема  
Автор Сообщение
Manwe
Администратор сайта


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


СообщениеДобавлено: Ср Янв 08, 2014 09:42    Заголовок сообщения: Ответить с цитатой

PACMAN

Преследовались следующие цели:
1) АнтиАлиасинг. Меня спрашивали почему Pong был без АА. Странный вопрос, но если народ тянется к прекрасному, надо ему это прекрасное дать.
2) Переключание сцен по времени. В данном случае две сцены используют некоторые общие части кода и за счёт этого можно было бы ужать программу, но смысл в другом: разделить по времени любые две сцены. Заодно потренировал сопряжение гармонических колебаний с линейным ходом времени. А также эффект fade in.
3) Совместимость. Некоторые браузеры не умеют воспроизводить анимацию, время у них всегда равно нулю. В этом случае сцена покажется с самого начала, а это - чёрный экран (fade in). По такому случаю к переменной времени t во всех местах добавляется число 4, чтобы показывать сцену с середины. "1 mod" для выделения дробной части не годится (см. следующее сообщение). И компоненту цвета blue лучше задать явно, нежели опустить.
Итого 433 байта. Ужимать нет смысла, лучше сохранить читаемость программы и совместимость.

А для любителей оптимизации - Pacman mini (223 байта)
Код:
: d dup ;
: p x t pi / d floor - 1.4 * 0.2 - ;
: r - d * + sqrt 0.018 < ;
p - d * y 0.5 - d * + sqrt 0.16 <
y 0.5 - p - atan2 abs t 10 * cos abs 0.8 * > *
p - d * y 0.58 r -
x x 8 * floor 0.5 + 8 / - d *
y 0.5 r
p > * +
d 0

Мжно сократить как минимум на 6 байт, но не вижу смысла - в 256 и так влезает, а совместимость терять не хочется.
_________________
Manwe/SandS
www.manwe.ru


Последний раз редактировалось: Manwe (Ср Янв 08, 2014 12:41), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Manwe
Администратор сайта


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


СообщениеДобавлено: Ср Янв 08, 2014 10:08    Заголовок сообщения: Ответить с цитатой

Digimind писал(а):
при использовании времени задействуется WebGL/GLSL. А там официальная спецификация такова: mod(x,y)=x-y*floor(x/y). При y=1 получается как раз то, что нужно: mod(x,1)=x-floor(x).

Проблема возникает в браузерах, не поддерживающих анимацию: Forth-программа переводится не в GLSL, а в JavaScript, и там "1 mod" работает иначе. В результате получаем глюк как на картинке (сверху - изначальная задумка, снизу - "оптимизированный" вариант):

_________________
Manwe/SandS
www.manwe.ru
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Manwe
Администратор сайта


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


СообщениеДобавлено: Ср Янв 08, 2014 16:40    Заголовок сообщения: Ответить с цитатой

SPACE INVADERS (509 байт)


_________________
Manwe/SandS
www.manwe.ru


Последний раз редактировалось: Manwe (Пт Янв 10, 2014 13:51), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Manwe
Администратор сайта


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


СообщениеДобавлено: Ср Янв 08, 2014 17:42    Заголовок сообщения: Ответить с цитатой

The making of... Smile

Дальше будет вот что (128 байт). Жаль, конечно, в этой реализации Forth побитовая операция AND заменена на логическую (0 = "ложь", любое другое число = "истина"), из-за этого пришлось раздувать программу.
Код:
: l 2 x 11 * floor ** / 2 mod swap y 11 * floor = * + ;
0 0 0
9 260 l
8 136 l
7 508 l
6 886 l
5 2047 l
4 1533 l
3 1285 l
2 216 l

Только не нажимайте в форме редактора кнопку SUBMIT. Вместо неё используйте кнопку UPDATE.

В 251 байт уже возможно такое (но я нацелен на 512 байт)
Код:
: d dup ;
: i t 2 + 9 / d floor - 0.5 - d 0 > 2 * 1 - * 2 / x + ;
: c 256 * floor 16 mod ;
: l over y c =
swap 2 i c ** / floor 2 mod *
i d 1 < swap 0.25 > * *
y 0.5 > *
rot + swap 1 - ;
0 0
9 1040 l 544 l 2032 l 3544 l 8188 l 6132 l 5140 l 864 l drop

Пока что засада с компилятором, который не переваривает многочисленные вызовы оператора "l". Пришлось откусывать от спрайтов нижнюю строчку, иначе space invaders не хотят шевелиться. Размер программы 338 байт
Код:
: d dup ;
: i t 2 + 9 / d floor - 0.5 - d 0 > 2 * 1 - * 2 / x + ;
: c 256 * floor 16 mod ;
: l over y c =
swap 2 i c ** / floor 2 mod *
i d 1 < swap 0.25 > * *
y 0.5 > *
rot + swap 1 - ;
0
0 9 1040 l 544 l 2032 l 3544 l 8188 l 6132 l 5140 l drop
t 7 * sin 0 > *
0 9 1040 l 4644 l 6132 l 7644 l 8188 l 4088 l 1040 l drop
t 7 * sin 0 <= *
+

Надежда на то, что в обоих спрайтах есть две одинаковых строчки, и если вынести их за цикл отрисовки, то можно сэкономить пару вызовов.

P.S. не нажимайте в редакторе кнопку SUBMIT! Только UPDATE.

Ну да, вынос двух строк спрайтов за цикл помог. 337 байт
Код:
: d dup ;
: i t 2 + 9 / d floor - 0.5 - d 0 > 2 * 1 - * 2 / x + ;
: c 256 * floor 16 mod ;
: l
2 i c ** / floor 2 mod
swap y c = * +
i d 1 < swap 0.25 > * *
y 0.5 > * ;
0
0 8 544 l 7 2032 l 6 3544 l 4 6132 l 3 5140 l 2 864 l
t 7 * sin 0 > *
0 8 4644 l 7 6132 l 6 7644 l 4 4088 l 3 1040 l 2 2056 l
t 7 * sin 0 <= * +
0 9 1040 l 5 8188 l +

Только встроенную видеокарту ноутбука это вешает напрочь.

Можно увеличить исходный текст на 11 байт, но зато облегчить работу компилятору и видеокарте (функция "i" будет вызываться не дважды, а один раз, после чего результат копируется в дополнительный стек, а позже возвращается оттуда)
Код:
: d dup ;
: i t 9 / d floor - 0.5 - d 0 > 2 * 1 - * 2 / x + ;
: c 256 * floor 16 mod ;
: l
2 i d >r c ** / floor 2 mod
swap y c = * +
r> d 1 < swap 0.25 > * *
y 0.5 > * y 0.85 < * ;
0
0 8 544 l 7 2032 l 6 3544 l 4 6132 l 3 5140 l 2 864 l
t 7 * sin 0 > *
0 8 4644 l 7 6132 l 6 7644 l 4 4088 l 3 1040 l 2 2056 l
t 7 * sin 0 <= * +
9 1040 l 5 8188 l


Цвета годные?


Или так лучше?


Или так:


А можно растворить верхние ряды в темноте. Ровно в 512 байт влезает:


Райно писал(а):
Последний вариант создает иллюзию, что их много ещё в темноте прячется, по-моему наиболее удачный)
А если скролл по инвадерам пустить, возможно там такое накодить?
CENSORED

Теоретически можно, но уже места не хватит Sad
У меня похожая идея припасена для следующего шейдера, в нём будет похожее.

Mikle писал(а):
А если цвет потеплее взять?

Космичность и олдскульность теряется Smile
_________________
Manwe/SandS
www.manwe.ru


Последний раз редактировалось: Manwe (Пт Янв 10, 2014 13:51), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Manwe
Администратор сайта


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


СообщениеДобавлено: Сб Янв 11, 2014 11:03    Заголовок сообщения: Ответить с цитатой

Нашёл автора Forth Programming Salon в Google+. Попрошу убрать кнопку SUBMIT куда-нибудь подальше. А то всю базу заспамили случайными нажатиями.
_________________
Manwe/SandS
www.manwe.ru
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Manwe
Администратор сайта


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


СообщениеДобавлено: Сб Янв 11, 2014 21:00    Заголовок сообщения: Ответить с цитатой

MOIRE - немного психоделической анимации.
В оригинале на GLSL было 107 байт, после портирования на Forth получилось 87 байт. Потом я ещё ход времени замедлил (так красивей), размер стал 91 байт.


_________________
Manwe/SandS
www.manwe.ru
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
BiTL
DOS lover


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


СообщениеДобавлено: Сб Янв 11, 2014 21:04    Заголовок сообщения: Ответить с цитатой

та ну, это уже не интересно ) Портируй Mars.exe Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Manwe
Администратор сайта


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


СообщениеДобавлено: Сб Янв 11, 2014 22:08    Заголовок сообщения: Ответить с цитатой

BiTL писал(а):
та ну, это уже не интересно ) Портируй Mars.exe Wink

Избаловал я вас!
Это интересно размером. Для ShaderToy вообще круто Smile

P.S. о, кто-то уже оптимизировал Moire. В самом деле, можно как минимум безболезненно заменить -rot на rot (их там два, стало быть, на два байта короче). И оказалось, что вещественные числа можно записывать не в виде "0.5", а экономить, опуская ноль - ".5"
_________________
Manwe/SandS
www.manwe.ru
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
frag



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


СообщениеДобавлено: Вс Янв 12, 2014 02:41    Заголовок сообщения: Ответить с цитатой

То же самое в 77 байт.
-rot на rot можно заменить только после перестановки порядка в стеке.


Последний раз редактировалось: frag (Вс Янв 12, 2014 02:45), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Manwe
Администратор сайта


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


СообщениеДобавлено: Вс Янв 12, 2014 02:45    Заголовок сообщения: Ответить с цитатой

frag писал(а):
То же самое в 77 байт.

Супер. Только объясни физический смысл этих гигантских коэффициентов!

Кстати, надо попросить автора сайта добавить возможность удалять свои хайку, иначе плодится куча ненужных клонов.
_________________
Manwe/SandS
www.manwe.ru
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
frag



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


СообщениеДобавлено: Вс Янв 12, 2014 02:51    Заголовок сообщения: Ответить с цитатой

У тебя в стеке значения идут такие:
2x 4x 8x
У меня rot в другую сторону и вызывается три раза, поэтому порядок такой
4x 8x 2x
256*256*4=262144
А время не удваиваю, поэтому оно как раз вдвое меньше координаты получается.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Manwe
Администратор сайта


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


СообщениеДобавлено: Вс Янв 12, 2014 17:37    Заголовок сообщения: Ответить с цитатой

Мой 9-летний сын уже такое пишет. Сам.


И такую анимированную штуку, очень круто:
Код:
x 9.4 * sin
y 9.4 * sin
t 4 * sin
* *
dup t 2 * sin *
dup t 3 * sin *


Непонятные злые анимации тоже строгает:


Ещё он лазал по JS и раскопал недокументированные операторы.
_________________
Manwe/SandS
www.manwe.ru
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Mikle



Зарегистрирован: 02.12.2008
Сообщения: 432
Откуда: Туапсе

СообщениеДобавлено: Вс Янв 12, 2014 19:30    Заголовок сообщения: Ответить с цитатой

Цитата:
Ещё он лазал по JS и раскопал недокументированные операторы.

Круто. Помню, когда-то я раскопал недокументированные инструкции в процессоре 6502 (на Atari), даже написал свой загрузчик игр с их применением.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
BiTL
DOS lover


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


СообщениеДобавлено: Вс Янв 12, 2014 19:59    Заголовок сообщения: Ответить с цитатой

Мой кот только что написал HalfLife 3, но уже удалил Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Manwe
Администратор сайта


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


СообщениеДобавлено: Вс Янв 12, 2014 20:08    Заголовок сообщения: Ответить с цитатой

BiTL писал(а):
Мой кот только что написал HalfLife 3, но уже удалил Wink

Smile Ссылка на недокументированные операторы - это мой код ("toy pyramid"), но первая строчка - с операторами, которые нарыл сынишка. Кстати, он в этот компилятор Forth'a уже добавил недостающую функцию 2SWAP и побитовые логические операции. Так-то! А я даже не лезу в этот JavaScript.
_________________
Manwe/SandS
www.manwe.ru
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов DemoScene.Ru -> Демо Часовой пояс: GMT + 3
На страницу Пред.  1, 2, 3, 4, 5, 6 ... 19, 20, 21  След.
Страница 5 из 21

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