PDA

Просмотр полной версии : Нужно залить произвольную фигуру фактурой


mikhailk
29.12.2010, 18:57
я так понимаю, нужно сделать из фигуры маску и подложить под нее прямоугольник, залитый через
beginBitmapFill.

Или есть способ проще?

Zebestov
29.12.2010, 19:28
Ну если фигура растровая, то можно и так. А можно побырику накидать фильтр в PixelBender.
А может и еще кто что проще подскажет.

Добавлено через 17 минут
Хотя, если нужного размера прямоугольник с текстурой загодя отрисовать и хранить в BitmapData, то можно попробовать обойтись BitmapData#copyPixels()

Wolsh
29.12.2010, 21:48
Я бы даже сказал #copyChannel().

mikhailk
30.12.2010, 01:11
работает ))

Единственно, приходится шаблон переводить в битмапдату


var template:Template = new Template();
var templateBitmapData:BitmapData = new BitmapData(400, 400, true, 0x000000);
templateBitmapData.draw(template);

var texture:Texture = new Texture();

var rect:Rectangle = new Rectangle(0, 0, 400, 400);
var pt:Point = new Point(0, 0);
templateBitmapData.copyChannel(texture, rect, pt, BitmapDataChannel.RED, BitmapDataChannel.RED);
templateBitmapData.copyChannel(texture, rect, pt, BitmapDataChannel.BLUE, BitmapDataChannel.BLUE);
templateBitmapData.copyChannel(texture, rect, pt, BitmapDataChannel.GREEN, BitmapDataChannel.GREEN);

var targetBitmap:Bitmap = new Bitmap(templateBitmapData);
addChild(targetBitmap);

Wolsh
30.12.2010, 01:43
Эмм... я вообщето предполагал тупо альфа-канал перенести на текстуру)))) А так действительно через #copyPixels() быстрее будет, задав параметр alphaBitmapData = templateBitmapData;

Zebestov
30.12.2010, 01:47
А не быстрее будет альфу в текстуру перенести?

Wolsh
30.12.2010, 02:00
Я думаю проблема в соответствии размеров текстуры и фигуры. Если они одинаковые - то можно попробовать, но что-то мне подсказывает, что чудес не бывает. А это значит нужна еще одна битмапдата в размер фигуры (она и пойдет в результирующий битмап), срисованная с текстуры и на которую уже можно кинуть альфаканал с битмапдаты, отрисованной с фигуры... мдя.. уж лучше copyPixels().

mikhailk
30.12.2010, 11:59
На самом деле, как раз скорость здесь принципиального значения не имеет.
Имеет значение простота.
Ну и чтобы лишние битмапдаты не плодить.

Wolsh
30.12.2010, 19:35
Вот я и говорю что один copyPixels проще и быстрее, чем три copyChannel. Да и по смыслу тут ничем копирование каналов не оправдано. В итоге Вы копируете просто пиксель, как он есть.

dimarik
31.12.2010, 02:50
Байткодом точно можно это сделать. В нем описаны все векторные величины и способ заливки. Там достаточно поменять источник заливки на кастомный.

Wolsh
31.12.2010, 03:18
А зачем хак, когда это делается тремя строчками кода? Чтобы сохранить некую векторную "сущность" фигуры? Не проще уж тогда сохранить ее параметры отрисовки (вершины и тд) и перерисовать с новой битмап-заливкой?
Впрочем я все время забываю что кто-то еще рисует фигуры во Flash IDE..

mikhailk
31.12.2010, 11:38
Впрочем я все время забываю что кто-то еще рисует фигуры во Flash IDE..

Этих людей зовут дизайнерами и флеш-аниматорами.
И их тыщи. :D

Wolsh
31.12.2010, 16:25
И они не пишут флэш-приложения на ActionScript 3.0
В идеале, конечно))) А на деле - вот такие вопросы.
Я сам - дизайнер, если что. Но когда речь идет о создании программы, а не мультфильма - IDE даже не открываю.

mikhailk
31.12.2010, 21:31
анимацию персов грузим жипегами/пнгшками и собираем в мувиклипы программно? :)
или там "высокохудожественные" элементы интерфейса...

черт его знает, у нас так организовано
дизайнеры готовят графику до уровня мувиклипов и я получаю уже fla-шки

Wolsh
01.01.2011, 01:42
Но когда речь идет о создании программы, а не мультфильма
анимацию персов грузим жипегами/пнгшками и собираем в мувиклипы программно?Не надо искать противоречия там, где их нет. И да, Вы знаете, очень многие именно так и поступают - рендерят персов в 3Ds MAXe в пнг, склеивают в ленты/полотенца и собирают в клипы программно.
"высокохудожественные" элементы интерфейсаПомилуйте, уж либо Flash IDE, либо "высокохудожественные". Для последних я пожалуй выберу Фотошоп. Хотя в свое время извращался и с Флэшем. (http://flasher.ru/forum/showpost.php?p=586455&postcount=18)

mikhailk
01.01.2011, 14:35
Я так понимаю, мы говорим просто о методе промежуточного хранения графики, из которого, конечно, следуют свои методы загрузки и обработки, но не более. Потому что внутри приложения работаем в основном либо с мувиклипами, либо с битмапами.

Можно отрендерить перса, слепить в один лист, загрузить картинкой, порезать внутри приложения и собрать мувик (кто-то, кстати, вроде маску гонять пытается). Можно отрендерить перса, собрать его во FlashIDE как готовый мувик и загрузить в приложение внешнюю swf-библиотеку с этим мувиком и сразу использовать.

Можно нарисовать "высокохудожественный" интерфейс в Фотошопе заэмбедить пнгшкой его в код и там дооформлять кнопками и надписями. А можно нарисовать "высокохудожественный" интерфейс в Фотошопе (или, кстати, Люстре), загрузить его во FlashIDE, дооформить его надписями и простыми графическими кнопками и выдать уже как готовый интерфейсный мувик в составе swc-библиотеки.

Выгодность первого подхода для меня, честно говоря, не совсем очевидна.

Wolsh
01.01.2011, 15:46
Я так понимаю, мы говорим просто о методе промежуточного хранения графикиНу если так, то извините. Я как-то все больше о создании. И давайте-ка здесь завязывать с флудом. Не вижу смысла обсуждать в этой теме способы организации труда и количество рабочих мест в вашей конторе))).

mikhailk
01.01.2011, 19:07
Ок, на исходный вопрос ответ я получил.
Ничего нового, насколько я понимаю, никто все равно не предложит.