Динамическая стереограмма
15.08.2007 Владимир БабушкинС игрой не связано, но имеет прямое отношение к 3D — любую трёхмерную штуку можно представить в виде стереограммы.
Существует множество программ для создания статичных стереокартинок, но мне было интересно, как этот эффект будет выглядеть в динамике.
Алгоритм построения анимированного стереоизображения я реализовал около года назад на Flash. Получился довольно простой и короткий код, который из графического шума строит стереограмму по специальной чёрно-белой карте, созданной по принципу «чем ближе, тем светлее» (очень похоже на визуализацию z-буфера). На каждый кадр анимации создаётся такая карта глубин и по ней стереокадр. Получается стереоанимация.
Не все умеют видеть стереограммы, но те у кого получается, увидят пульсирующий логотип Альтернативы.

15.08.2007 в 18:51
Забавно получилось :)
http://community.livejournal.com/3d_magic_eye/
16.08.2007 в 02:20
супер эффект! сначало ниче не видел! а потом как в стеклянном телевизоре лого пульсирует!
16.08.2007 в 03:38
Даёшь стерео-режим в 3D-движке! :)
Кстати, можно попробовать стерео для анаглифных очков.
17.08.2007 в 13:12
Первый раз вижу анимированное стереоизображение )
17.08.2007 в 13:25
Раньше тоже увлекался просмотром стереограмм, с анимацией просто башню срывает, супер!
А можно как нить увидеть алгоритм преобразования «специальной чёрно-белой карты» в стерео?
p.s. Анаглиптика кстати не сложно делается, эксперементировал в свое время — эффект прикольный.
17.08.2007 в 15:01
Да вот вобщем-то и весь алгоритм:
bitmapData.noise();
bitmapData.applyFilter(bitmapData, bitmapData.rectangle, new Point(), new DisplacementMapFilter(grayScaleMap, new Point(), 1, 0, 256, 0, «ignore»));
Там ещё около 50 строчек, но это импорты классов, объявления переменных, события и разные графические украшательства. Основа эффекта — DisplacementMapFilter. Даёшь ему чёрно-белую карту и он сам по ней делает стереограмму, его только надо заставить правильно работать. Я был в шоке, когда случайно обнаружил это. Поскольку это встроенный фильтр, у него внутри быстрые низкоуровневые алгоритмы обработки растра. Поэтому всё так шустро работает. Если бы я реализовал этот эффект через getPixel/setPixel, ФПС был бы наверное меньше 0.1.
31.08.2007 в 23:07
Да, всё гениальное просто!
17.01.2008 в 00:51
Я сначала даже не сразу осознал, что стереограмма генерируется на лету, вот это да! Это же можно делать 3D игры в режиме стереограммы! Я делал Stereogram Tetris на флеше, но для этого пришлось все комбинации сгенерировать отдельно и включить готовыми изображениями во флэшку.
К сожалению у меня не получилось повторить такой же результат как у вас:
http://pics.livejournal.com/3dimka/pic/00040pxc
Не могли бы вы подробнее описать ваш метод, или еще лучше выслать/выложить исходник (3dimka/gmail/com)?
Я слышал в фотошопе тоже есть такой фильтр, можно ли вашем методом делать стереограммы в фотошопе?
Вообще ваш проект — просто фантастика, я и не подозревал, что Такое можно делать на флеше!
18.01.2008 в 10:24
В Фотошопе есть дисплэйс-фильтр, и похоже он работает также, как и флэшовый, но я ни разу не пробовал использовать его для стереограммы, может быть будет работать.
28.04.2008 в 13:18
Нашел очень интересную вещь. Переписал ваш код на as3 и нашел разницу в применении DMF.
Вот исходник http://vapes.na.by/bug.fla. Снизу написано на 3, сверху — на 2. На первый взгляд различий нет (или я ошибся?), но работает по разному.
Если это всеже баг плеера, то можно ли как-нибудь его обойти? (например клонировать текстуру и потом применить фильтр?)
28.04.2008 в 20:58
Глянул, так и не понял, почему такая разница при одинаковом коде.
Однако, если применение фильтра (последняя строка) вызывать столько раз, сколько периодов (в данном случае 9), то всё гут. Наверное 8 так и делает, только сама :))
28.04.2008 в 21:26
Спасибо за подсказку (на заметку: делаю онлайн генератор стереограмм на флексе). Коды и исходники выложу на блоге (если вообще его закончу).
А вот по поводу бага наверное лучше запостить в адобовскую jira. Я уже 2 серьезный баг нахожу у этого малоизведанного, но любимого фильтра.
16.09.2008 в 19:02
Владимир, мне на работе дали задание. Часть этого задания — это генерация стереограммы. Что-то получаеться, что-то вызывает трудности.
Пожалуйста помогите. :) Я пишу на шарпе и те две строчки кода, что вы привели мне особо ничего не сказали.
Если вас не затруднит, вышлите, если не весь когд, то хотябы часть про алгоритм построения на почту moby@iitp.ru
09.02.2009 в 02:43
Не могли бы вы пояснить параметры у DisplacementMapFilter ?
Нужно понять что именно делает этот фильтр . . .
Потому-что делаю сейчас проект по стереограммам не на флеше . . .
10.02.2009 в 12:20
Этот фильтр двигает пикселы в соответствии с картой.
Подробнее можно прочитать на http://livedocs.adobe.com/flex/gumbo/langref/
10.02.2009 в 13:50
Ссылка на русский хелп по DisplacementMapFilter:
http://help.adobe.com/ru_RU/AS3LCR/Flash_10.0/flash/filters/DisplacementMapFilter.html
11.02.2010 в 15:03
Уважаемый автор статьи. У меня есть давняя мечта -идея для реализации которой необходимо использование фильтра из этого примера, но сам я только начал постигать азы программирования Flash. Я дизайнер. Если Вам не солжно отпишите мне в skype — nifa_kind_boy или icq 470891794.