Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Мягкая кисть во Флеш-рисовалке (http://www.flasher.ru/forum/showthread.php?t=170323)

HardCoder 22.10.2011 15:15

Мягкая кисть во Флеш-рисовалке
 
Здравствуйте. Есть небольшая рисовалка, написанная на АС3. Инструмент кисть работает следующим образом: пользователь щелкает мышью, потом с помощью события MouseMove отрисовывается линия от начальной точки к текущим координатам курсора, потом к следующим координатам курсора и т.д. В итоге получается непрерывная кривая (мазок). Цвет и толщина мазков (линии) определяется пользователем. Но дело в том, что хочу сделать возможность настраивать мягкая/твердая кисть (размытые/четкие края мазка как в фотошоп).
Подскажите, пожалуйста, как реализовать такое.

Zebestov 22.10.2011 15:56

С помощью drawTriangles(). Создать битмапдату с линейным вертикальным градиентом (верх и низ мягкие, середина сплошная). И рисовать не линию, а полигон из двух треугольников, текстурированных этой битмдатой. Получится линия с мягкими краями. По аналогии начало/конец линии создаются с помощью битмапдат с "пушистыми" полукругами.

HardCoder 22.10.2011 18:18

Не знаю, правильно ли я понял, так как drawTriangles() для меня нечто новое. Но не является ли такая линия тем же что и прямоугольник, залитый градиентом?

in4core 22.10.2011 18:32

является да

HardCoder 22.10.2011 19:00

Дело в том, что "отпечаток" кисти - круглой формы. И если рисовать толстую линию с помощью lineTo(), то оба концы у нее будут скругленными (то что мне и надо - так как в других графических редакторах). Но если рисовать треугольниками толстую линию, то концы будут, какбы, квадратными. :o

Zebestov 22.10.2011 21:24

Цитата:

концы будут, какбы, квадратными
а до конца мой ответ осилить никак не выйдет точно? может попробуешь все же :)

HardCoder 23.10.2011 09:19

Цитата:

Сообщение от Zebestov (Сообщение 1041162)
По аналогии начало/конец линии создаются с помощью битмапдат с "пушистыми" полукругами

Теперь понял. Спасибо :)

Art_133 23.10.2011 11:38

Можете привести часть кода? Самому интересно.

crazyone 23.10.2011 15:13

А мне всегда казалось, что лучше всего с этой задачей справляется BlurFilter, наложенный на четкую линию.

HardCoder 23.10.2011 16:18

А правильно ли отрисуется "смягченный" спрайт, с помощью BlurFilter, в Bitmap? Имею в виду: будет ли растровое изображение созданное из Sprite иметь тоже смягченные края?

Wolsh 23.10.2011 17:38

Будет.

Zebestov 23.10.2011 21:42

Цитата:

Сообщение от crazyone (Сообщение 1041276)
А мне всегда казалось, что лучше всего с этой задачей справляется BlurFilter, наложенный на четкую линию.

Показалось. Не лучше. Всего лишь проще. Плюс побочным эффектом от метода с треугольниками может стать возможность реализовать всякие артистичные линии.

crazyone 23.10.2011 22:54

Цитата:

Сообщение от Zebestov (Сообщение 1041363)
Показалось. Не лучше. Всего лишь проще. Плюс побочным эффектом от метода с треугольниками может стать возможность реализовать всякие артистичные линии.

Мне было бы интересно узнать поподробнее. Почему треугольники лучше?

Я вот не вижу, как с треугольниками и полукругами на концах реализовать нормальный стык двух отрезков. Т.е. - не будут ли размытые края отрезков накладываться друг на друга?

Zebestov 23.10.2011 23:06

Цитата:

Сообщение от crazyone (Сообщение 1041379)
Мне было бы интересно узнать поподробнее. Почему треугольники лучше?

Да уже хотя бы из-за описанного выше побочного эффекта.
А если ограничиться лишь "рисованием мягких линий" — производительностью даже на слабой машине... даже на очень слабой машине. А с приходом аппаратного 3D треугольники и вовсе ушли далеко вперед.

Цитата:

Сообщение от crazyone (Сообщение 1041379)
Я вот не вижу, как с треугольниками и полукругами на концах реализовать нормальный стык двух отрезков. Т.е. - не будут ли размытые края отрезков накладываться друг на друга?

Каких двух отрезков? Нужно уточнить. Если речь о непрерывности линии, то не нужно в конце каждого отрезка ставить терминатор. А если речь о двух разных линиях, то непонятно о чем вообще речь :)

Probity 23.10.2011 23:26

Ммм вроде даже 2 blur фильтра при наложении у меня дают искажения в графике флэша в виде косяков при анимации и черных пятен. Прокатит норм если один блер делать имхо, а если выбор размытия и куча блеров - начнется неправильная прорисовка и тормоза. (

crazyone 23.10.2011 23:33

Ну да, я про непрерывную линию - два отрезка под некоторым углом, отличным от 180. Если два отрезка рисовать прямоугольниками - они не будут нормально стыковаться. Если высчитывать трапеции, то, хм... Мало того, что много гемора, так еще и стык не совсем качественный будет, так еще и каждый отрезок до конца можно будет нарисовать только после того, как будет проведен следующий отрезок.

Вобще, я просто не могу понять, как можно нормально ломаную линиию разбить на треугольники.
Чтобы не флудить лишнего - нарисуй, пожалуйста, на вот этом примере разбивку по треугольникам:
[IMG]http://i.***********/i7/b97ef0bedd31b62ad66fb77a625ee107/1-5-1047/60058049/blurLine.jpg[/IMG]

Ну, или покажи рабочий пример такой рисовалки.

Zebestov 24.10.2011 00:02

Вложений: 1
Здесь смотрим пример подобной реализации.
А вот так разбиваем на треугольники:

crazyone 24.10.2011 01:01

Так стыками-то жертвовать приходится. И в примере и в этой разбивке - получаются "рваные" стыки, не скругленные ни разу.

Zebestov 24.10.2011 01:20

Я же выше все расписал, неужели трудно самому понять, какие 2 треугольника должны находиться на каждом конце линии и какая для этого нужна текстура?

Wolsh 24.10.2011 01:30

Трудно. Честно.
Речь о стыке. Мышку не отпускали, это ОДНА линия. Но на стыке будет угол там, где должно быть мягкое скругление. В примере по ссылке (интересном, спасибо!) это хорошо видно, если провести линию с острым углом (скажем вправо и сразу влево чуть вниз)) Даже артефакты появляются.

Zebestov 24.10.2011 01:42

Тю блин. Вы о точках ломаной, а не о концах. Ясно.
Да, в примере они не реализованы. Сделать их можно теми же треугольниками в виде веера вокруг опорной точки (которая снимается с мыши).

crazyone 24.10.2011 01:56

Я все понял про текстуру и трехугольники. Но в результате отрисовки по треугольникам, которые нарисовал ты, получится вот такая линия:
[IMG]http://i.***********/i7/40f7d05c73327a490faedf84caeeb6bf/1-5-1055/917860/CustomBrush.jpg[/IMG]
У нее "рваный" или "ломаный" стык, о чем я и говорю.

ЗЫ Чего нервничать?

Zebestov 24.10.2011 01:59

Выше уже ответил. И это не "нервы", это возмущение на якобы "непонимание простых вещей", которое я ошибочно прочитал в твоем посте ;)


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

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