Войти
АртФорумОбщее

Дрожь в линиях (3 стр)

Страницы: 1 2 3
#30
9:58, 26 фев. 2019

Подписался на тему.


#31
18:17, 26 фев. 2019

Megabyte-Ceercop
> Sbtrn. Devil пиши чего нехватает, возможно, оно есть, или добавлю. : )
Не хватило (или не нашёл) вот каких вещей:
1) Режим гладкости для точек на середине линии (это когда при её движении и при манипуляции прилегающими отрезками направляющие в точке остаются на одной прямой).
2) Возможность не только добавлять точки в середину линии, но и удалять.
2.5) Хорошо бы также уметь цеплять к линии/крайним точкам не только крайние точки, но и средние, а то сейчас так можно только с разрывом линии.
3) Регулировать разрешение сохраняемой растровой картинки (а то она всегда 2048х2048)
4) Возможность сетки под нужное разрешение целевой картинки и снапа вершин.
5) Возможность изображать картинку просто линиями фиксированной толщины, без расширения-сужения штриха и без сглаживания.
Юзкейс для 3-5 - набросать контурный макет, потом вытащить его в растровый редактор и там раскрашивать эффектами.

Насколько я прозрел в коде рендера в svg (да, не удержался, посмотрел :), набор рисовательных команд самый минимальный. Отсюда напрашивается ещё одна идея - сделать экспорт (а может, и импорт) в самопальном минималистичном json-формате и задокументировать его, чтоб желающие могли напускать на него самописные утилиты. А с этого плацдарма уже можно будет так развернуться, что ого-го.

#32
21:13, 26 фев. 2019

Sbtrn. Devil
Отвечу по пунктам.
1 - для такого поведения понадобится добавление кривых второго порядка. Но такие кривые сложнее контроллировать. + придется много арифметики сделать для них. Пока не могу.

2 - для удаления вершины нужно кликнуть по ней в режиме "кусачек" (хоткей "3").

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

3 - попробую добавить

4 - привязка при экспорте или при рисовании. Я этого не дедал, так как самому такое небыло нужно. Для рисования персонажей привязка никогда не нужна.

5 - фиксированная толщина включается если в окне слоев у слоя включить толщину линии 1 или тоньше. Также можно нарисовать отрезок т в режиме редактирования толщины (хоткей 5)
кликнуть по коцу отрезка чтобы переключить вершину в режим без заострения после чего все новые линии будут рисоваться без заострения.


На счет джейсона - он уже есть. При сохранении на сервер json уходит в запросе. Также json изображений можно выдернуть из devtools->application->local storage. формат там простой. Экспорт могу приделать. : ) у самого есть идея растеоизатора с дополнительными настройками стиля (форма заострений) и очень аккуратными стыками за счет растеризации кистью которую прогоняем по кривым. В векторе это все сложнее и мейчас есть разные заусенцы на стыкпх.

#33
1:14, 27 фев. 2019

Megabyte-Ceercop
> кривых второго порядка. Но такие кривые сложнее контроллировать.
А, у тебя ж квадратичное безье. Но с ними тоже не должно быть ничего навороченного. Если двигаем саму гладкую точку или конвертируем острую в гладкую - считаем, что она лежит на кривой между 2 соседними, и делаем "провести кривую через A, B и C и разбить на две в B" (по тому же принципу, как при добавлении точки клещами). Если изменяется отрезок, выходящий из гладкой точки, то контрольная точка другого отрезка сдвигается вдоль другой касательной:
quad_slide | Дрожь в линиях
(чтобы сохранить прямую касательную в гладкой точке и не менять касательную в следующей). Отсюда получается два возможных случая: или таскается точка - затрагивает максимум 4 отрезка (выходящие из неё и из соседних вершин), или таскается отрезок - затрагивает максимум 2 отрезка (он сам и соседние).

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

> Также json изображений можно выдернуть из devtools->application->local
> storage.
Ну это всё-таки хак, что неприлично. :) К тому же жсон там заэскапированный.

> если в окне слоев у слоя включить толщину линии 1 или тоньше.
Кстати, заметил дефект: на фаерфоксе и едже драг левой для регулировки толщины и прозрачности не работает - он пытается делать драг-дроп. Работает правой кнопкой, но тогда при её отпускании вылазит меню.

#34
5:45, 27 фев. 2019

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

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

Экспорт джейсона записал в задачи. за Фф апасибо, проверю и поправлю, никогда на нем не пробовал : )
Многие кнопки и тузлы в программе работают и на клик и на перетаскивание.

#35
4:19, 3 мар. 2019

Не очень верилось, что со сглаживанием квадратичных безье есть сложности, поэтому поставил опыт. Зря не верилось. :) Но мне показалось, это не та проблема, которая смеет создавать нам сложности. Поэтому попробовал её решить и, кажется, решил. Вот пример на хтмл5: тест сглаживания
Способ решения - добавляем вершинам специальный режим, я обозвал их "суб-вершины" (все остальные - "мастер-вершины"). Две суб-вершины не могут идти подряд, между ними всегда должна быть мастер-вершина. На суб-вершину накладывается условие - она должна всегда располагаться посередине между контрольными точками её обоих сегментов. Для этого допускается двигать суб-вершину, даже если юзер двигает смежный с ней сегмент или его мастер-вершину. Пара сегментов "мастер-суб-мастер" адекватно заменяет кубическое безье.
Для мастер-вершины, у которой с обеих сторон есть суб-вершины, возможно автосглаживание.

В примере таскание работает по следующей стратегии:
- если тащим суб-вершину или сглаженную вершину, то контрольные точки её сегментов сдвигаются на то же смещение (т. е. касательная в ней сохраняется),
- если тащим сегмент, то делаем так, чтобы t точки, за которую тащат, осталось тем же t на новом месте, и чтобы контрольная точка на отрезке с другой стороны от суб-вершины осталась на месте.

По-моему, поведение получается достаточно адекватное. Единственная пара не сильно удачных моментов, потому что они решались в лоб:
- начальный выбор касательных при переключении вершины в сглаженный режим - контрольные точки выставляются в стороны на 0.5 от вектора между соседними мастер-вершинами. Слишком сильно распирает линию. Вместо 0.5 лучше брать какой-то коэффициент похитрее.
- при автосглаживании выравниваемая направляющая в мастер-вершине выставляется симметрично изменившейся. Это чрезмерное ограничение, из-за которого при движении сегмента или суб-вершины слишком сильно плавают соседние сегменты. Если делать длину выравниваемой направляющей несимметричной, должно получиться приятнее, но как именно - пока не придумал.

#36
16:43, 3 мар. 2019

Sbtrn. Devil
Неплохо получилось : )
Но на мой вкус, чем проще тем лучше. В версии с простыми сплайнами все воспринимается на уровне позвоночника. А вот когда несколько типов вершин, приходится думать. Может дело привычки.
Для меня на много проще отследить чтобы не образовалось ненужного угла правильным перетаскиванием, чем думать, за что именно нужно тянуть для достижения той или оной цели.

#37
3:18, 1 июля 2019

Megabyte-Ceercop
> У меня таже проблема была : ) Для себя поборол написанием своей рисовалки.
крутая штука.
gamedev | Дрожь в линиях
LineMaster -> svg -> tinkercad -> obj-> "свой software raytracer" -> png

Страницы: 1 2 3
АртФорумОбщее