![]() |
Нарисовать 4-угольник с градиентами от углов
Вложений: 1
Есть BitmapData, на нем надо нарисовать 4-угольник. У каждой вершины есть свой цвет, градиентами которых надо залить всю площадь фигуры. Пример во вложении. Только при его создании использовался обычный линейный градиент, поэтому цвета снизу несовсем такие как надо, а поскольку стороны у нас не параллельны, то линейный градиент тут непригоден.
Причем рисовать желательно быстро, таких полигонов несколько тысяч, выставленных рядом. Но это не главное - гланое точная заливка, надо как можно точнее передать цвет. |
Линейный, в направлении биссектрисы угла с цветом угла, от с альфой [1,0], какого размера незнаю. х 4 угла (4 раза заливаем )
|
Ты хочешь сделать градиент меш. быстрым он не будет в любом случае...
Но например как вриант решения. 1й шаг.Залить все полигоны цветами - средним арифметическим от цветов четырех вершин каждого полигона по RGB. 2й шаг 2 варианта. ваиант а) Исолзовать радиальную заливку со мещенным фокал центром в каждой вершине. радиус и положение заливки должен быть равен радиусу окружности описанной вокруг многоугольника образованного из точек смежных к данной вершине а фокал центр сместить в положение вершины, б) нарисовать туже окружность без градинета с половинным радусом а потом после отрисовки всех окружностей на все изображдение применить блур фильтр. |
Вложений: 1
Цитата:
Цитата:
|
всё там видно. просто площадь занимаемоя конкретным цветом разная. жотого само сабой сабой меньше всего, так как у него угол имеет самое большое отклоение от прямого. у угла в 90 градусов будет самая большая активность.
|
можно рисовать как это делают вот эти товарищи. Создается битмапдата 2x2 с параметром smooth, точки красятся цветами вершин, далее считаются нужные трансформации для битмапа и рисуется на экране через beginBitmapFill. В твоем случае, т.к. полигон четырехугольный, надо разбить его на 2 треугольника и для каждого посчитать свой matrix.
Делаешь 3д движок, да? |
можно попробовать залить дважды линейными градиентами цветов от 1 к 3 и от 2 к 4 с 50% прозрачности во второй раз.
|
тама полигонов несколько тысяч, флэш мувики с альфой очень медленно отрисовывает, у fp сердечный приступ случится =)
на самом деле тот вариант что я описал такое тоже не потянет, на моей тачке рисуется 100-120 полигонов при fps ~ 25, это так для прикидки. |
Цитата:
Цитата:
|
а какая разница?
|
ну, наверно так можно рисовать все заливки в один непрозрачный мувик
|
при растеризации таких градиентов с прозрачностью флэш будет вычислять суммарный цвет, а это тормоза.
|
тогда может вам поможет blending mode add?
|
ага, пробывали и так, процентов на 20 медленее =)
|
возможно эта картинка поможет
http://www.inkscape.org/screenshots/...perimental.png |
А кто может подсказать, по какому вобще принципу можно получить множественный градиент(3 и больше цвета) ????
вот например, хочу окрасить треугольник, у которого градиент будет такого же цвета как и вершина.... хотя бы в какую сторону копать, подскажите плиз |
на эту тему можно почитать тут
|
вы дали ссылку на эту же тему )))
мне нужно чуть другое.... просто, как построить треугольник трехградиентный.... вроде бы через BitmapData можно.. но не уверен |
это потому, что эту тему не мешало бы сначала прочитать.
|
да вообще-то битмапдата тут не причём. бесектриса в руки.
|
Цитата:
Цитата:
|
Цитата:
1) создаешь битмапдата 3x3 (почему не 2x2 обьясню ниже) 2) расчет деформации Код:
// предусловие:Код:
// предусловие:Теперь по поводу размера битмапки 3x3. В формулах битмаповые координаты s1x,s1y,... стоят в знаменателе и чтобы избежать деления на ноль, лучше сместить все координаты на 1. Т.е. битмапка для заливки должна быть примерно такая: http://smb.intech-ltd.com/Serega/Phong/1.png Знаю написано довольно скомкано, если будут вопросы - спрашивай да, чуть не забыл. Формулы которые я привел выглядят довольно пугающе, но есть еще вариант по проще (содрал его не помню у кого). Работает он чуть медленее но зато выглядит красивше Код:
m = new Matrix(); |
Цитата:
|
согласен, в принципе должно работать. Кстати т.к. координаты вершин в битмапдате не меняются, формулы можно еще подсократить.
|
|
| Часовой пояс GMT +4, время: 03:03. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.