Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Не сайты (http://www.flasher.ru/forum/forumdisplay.php?f=82)
-   -   Зацени пару моих эффектов на флэше (http://www.flasher.ru/forum/showthread.php?t=111344)

MrPoma 24.04.2008 23:12

И мой :(

mikleb 25.04.2008 00:12

Наверно глупый вопрос:), может у вас обоих старый плеер стоит?

Ekzi 25.04.2008 09:04

У меня тоже танк не играет. FP9

mikleb 25.04.2008 13:39

2Ekzi
В танке если ничего не делать должен быть белый экран, вы точно читали описание?

Волгоградец 25.04.2008 14:12

Офигенно круто!!! Подскажи, где можно почитать, чтобы так же научиться делать. А то твой код не пойму без теории...

mikleb 25.04.2008 15:00

2Волгоградец
Выше я написал как это делать. Вообще сперва это сделали альтернатива но они никому не хотят говорить как это делать. Потом я почитал в википедии про паралаксы и бамп мэппинги и сделал:)

mikleb 25.04.2008 15:04

Могу рассказать и теорию если интересно:)

Волгоградец 25.04.2008 15:11

Интересно ).

mikleb 25.04.2008 16:05

Бамп мэппинг:
(n, v) - скалярное произведение вектора n на v
Есть поверхность, и надо узнать степень освещенности каждой ее точки.

Степень освещенности точки поверхности = (n,v)
n - нормаль к поверхности в этой точке
v - анти-направляющий (т.е. направлен в противоположную сторону) вектор света который падает в эту точку.

Так как |n| =1 и |v|=1 и угол между n и v острый то 0 < (n,v)<=1 т.е степень освещенности это число от 0 до 1.

Теперь как хранить нормали:
Удобно хранить их в виде картинки, где цвет каждого пикселя будет кодировать нормаль к поверхности в данном пикселе (точке).
Каждая компонента вектора нормали это вещественное число от -1 до 1,
а каждая компонента вектора цвета (R,G,B) это целое число от 0 до 255.
Т.е нужно отрезок [-1,1] перевести в отрезок [0,255], это проще всего сделать линейным преобразованием. Поэтому если в данном пикселе нормаль к поверхности (x,y,z), то в карте нормалей цвет данного пикселя будет R=x*128+128, G=y*128+128, B=z*128+128. И обратно x=R/128-1, y=G/128-1, z=B/128-1.

Теперь нужно научится получать степень освещенности (обозначим ее S) произвольного пикселя по цвету данного пикселя в карте нормалей (обозначим его (R,G,B), а нормаль в этом пикселе (x,y,z)), и анти-направляющему вектору света в этом пикселе ( обозначим его (vx,vy,vz). S по определению = (n,v) = x*vx+y*vy+z*vz = (R/128-1)*vx+(G/128-1)*vy+(B/128-1)*vz = R*(vx/128)+G*(vy/128)+B*(vz/128)-(vx+vy+vz)

Карта освещенности это чернобелая картинка где цвет каждого пикселя = (R=S*256, G=S*256, B=S*256) (для каждого пикселя своё S)

Видно что вектор (S*256,S*256,S*256) ЛИНЕЙНО выражается через вектор цвета карты нормалей (R,G,B) , а именно:
(S*256,S*256,S*256) = ((2*vx) * R + (2*vy) * G + (2*vz) * B - 256*(vx+vy+vz), то же самое, то же самое)
Запишем матрицу этого линейного преобразования в массив a, только надо учти что alpha не меняется. Эта матрица будет одинаковой для каждого пикселя потому что у нас - параллельное освещение и (vx,vy,vz) постоянный для каждого пикселя. И применим к карте нормалей фильтр ColorMatrixFilter с этой матрицей который как раз и делает линейные преобразования над цветом каждого пикселя картинки.

Волгоградец 25.04.2008 19:12

Спасибо. Попробую разобраться.


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

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