Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.05.2008, 16:48
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 1  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
По умолчанию Как работает DisplacementMapFilter

Добрый день! Не могу понять как работает этот фильтр. В хэлпе приведена формула:
Код:
dstPixel[x, y] = srcPixel[x + ((componentX(x, y) - 128) * scaleX) / 256, y + ((componentY(x, y) - 128) * scaleY) / 256]
Расшифрую: берется пиксел из карты смещений, рассчитывается его смещение по формуле и затем на это расстояние смещается пиксел из целевого рисунка.
Но! Если у меня нейтральное изображение карты смещений, то пиксел изменять положение не должен. Поясню: если я задаю цветовой канал, по которому будет происходить смещение, например зеленым, а в карте смещения такого цвета нет (т.е. в любой точке значение зеленого канала равно 0), то пикселы останутся на месте. Так?
Но по формуле выходит так:
Код:
(componentX(x, y) - 128) * scaleX
не равно 0, т.к. componentX(x, y) != 0!!!!! И соответственно смещение происходить будет!!! Как так????

Старый 16.05.2008, 17:02
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 2  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
http://flasher.ru/forum/showpost.php...9&postcount=48

Старый 16.05.2008, 17:14
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 3  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Гыыы... Неправильную формулу подсовывают... Кстати, та формула, что ты привел тоже неверная. Спасибо!

Старый 16.05.2008, 17:29
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 4  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Не знаю, может и правильная в хелпе.
Но я когда я делал пример с дисплейсом, то моя формула объясняла сдвиг, а формула из хелпа нет.

Старый 16.05.2008, 17:36
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 5  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Я от обратного отталкиваюсь: смещения происходить не должно, если
Код:
((componentX(x, y) - 128) * scaleX) / 256 = 0
В этом случае componentX(x, y) должен быть равен 128. Но это противоричит дисплейсменту - если componentX(x, y) равен какому-то значению, то должно быть смещение.

Старый 16.05.2008, 17:46
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 6  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Нет, там вроде как раз если componentX(x, y)=128, то сдвига нет. А если не равен, то сдвиг либо влево, либо вправо соответственно. Так направление сдвига учитывается.

Старый 22.05.2008, 19:59
Alex_beginner вне форума Посмотреть профиль Отправить личное сообщение для Alex_beginner Найти все сообщения от Alex_beginner
  № 7  
Ответить с цитированием
Alex_beginner
 
Аватар для Alex_beginner

Регистрация: May 2008
Сообщений: 476
Волгоградец!

Вот отведай сие блюдо

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

1. Берется пиксель (x,y) карты смещения
2. Рассчитывается смещение в зависимости от цвета этого пикселя (dx,dy)
3. Вычисляется новое положение пискеля в исходном изображении по формулам: x+dx, y+dy.
4. Рисуется пиксель в вычисленной точке, если, конечно, эта точка находиться в допустимых пределах.

Полная формула:

новый_пиксель[X]=исходный_пиксель[X]+(каналX_цвета_пикселя_карты_смещения-128)*масштаб_X/256
новый_пиксель[Y]=исходный_пиксель[Y]+(каналY_цвета_пикселя_карты_смещения-128)*масштаб_Y/256

Синтаксис:
DisplacementMapFilter(mapBitmap:BitmapData, mapPoint:Point, componentX:Number, componentY:Number, scaleX:Number, scaleY:Number, [mode:String], [color:Number], [alpha:Number])

mapBitmap - карта смещения;
componentX - указывает какая цветовая сотавляющая будет использоваться для расчета X
componentY - указывает какая цветовая сотавляющая будет использоваться для расчета Y
ну и тд

Старый 23.05.2008, 10:23
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 8  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Да хэлп я читал. Это все понятно. Объясню, что мне не понятно: смещение происходит в соответствии с интенсивностью цветового канала - если цвет отсутствует, то смещения нет. Соответственно, если интенсивность равна 255 (максимальное значение), то происходит наибольшее смещение. В формуле я что-то не вижу, где учитывается значение цвета...

Старый 23.05.2008, 10:32
Alex_beginner вне форума Посмотреть профиль Отправить личное сообщение для Alex_beginner Найти все сообщения от Alex_beginner
  № 9  
Ответить с цитированием
Alex_beginner
 
Аватар для Alex_beginner

Регистрация: May 2008
Сообщений: 476
Увы. Дела обстоят несколько иначе.

0 - канала карты смещения это не нулевое смещение пиксела а отрицательное (т.е. противоположно положительному направлению X или Y)
255 - соотвествует максимальному смещению в положительную сторону;
128 - смещения вообще никакого нет.
Посмотри в формулку, то че в скобках при значении каналX_цвета_пикселя_карты_смещения = 128 вся эта гирлянда обнуляется
и новый_пиксель[X]=исходный_пиксель[X] т.е. смещения собственно и не будет

Старый 23.05.2008, 10:43
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 10  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Все, догнал. Я почему-то был уверен, что раз 0, значит нет смещения. Спасибо тебе, Alex_beginner.

Создать новую тему Ответ Часовой пояс GMT +4, время: 08:49.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 08:49.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.