Как стать автором
Обновить

Использование графических эффектов в приложениях UWP с помощью Win2D

Время на прочтение6 мин
Количество просмотров14K
Всего голосов 35: ↑34 и ↓1+33
Комментарии15

Комментарии 15

Всё это очень интересно, но как этим пользоваться в условиях MVVM?
Win2D это:
— отскок в сторону от MVVM, нет привычного Binding, вся графика code behind
— развитие GDI+ поверх Direct3D (для любителей WinForms очень простой переход)
— ускорение графики раз в 100 в сравнении с MVVM векторной графикой.

Поэтому, если элементов у вас немного, тогда MVVM. Если элементов много или много анимации — Win2D.
Можно мешать MVVM и Win2D, т.к. CanvasXXX (а их сейчас уже четыре) является обычной прямоугольной областью, которая встраивается в визуальное дерево XAML
это скорее развитие Direct2D, чем GDI. У них схожее API в чем-то, но первый гораздо быстрее.

Так то его можно использовать и начиная с Windows 7(Vista если есть Platform Update), но всякие новомодные эффекты ввели только с 8/8.1
Есть библиотечки типа SharpDX, которые дают доступ к Direct2D даже для WinForms и WPF, отлично работают.

На мой взгляд, это не отскок, это логика на стороне view. Никто ведь не мешает создавать и использовать зависимые свойства при работе с win2d.
А библиотеку для графиков не находили? Чтобы 10к разных можно было рисовать.
Графики 2D функции, y=f(x)?

1. Нарисовать сетку
2. Нарисовать 10к Polyline полупрозрачных, чтобы лучше были видны сгустки.

По минимуму можно в десяток строк кода уложиться.
Нет, ну нужно же чтобы нормально работало на разных диагоналях экрана и ориентации.
Плюс lifetime подхватывать. Не так уж и просто.
Последняя картинка напомнила, как я экспериментировал с аппроксимацией изображений полигонами. Дальше треугольников не продвинулся, к сожалению.
image
а как рисовать анимацию? например нарисовать прямоугольник при движении мыши?
или сделать прямоугольник что-бы пульсировал и при этом мышью рисовать что-то вокруг?
Есть ли где-нибудь пример, как с помощью этого нарисовать тень от элемента?
More TextEffects in Win2D — вот по этой сылке можно найти пример использования класса ShadowEffect Смотрите пример Text with shadow
Для сравнения нужно тесты писать.
Можно попробовать отобразить фрагменты OpenStreetMap.
Поддерживаю, тем более учитывая наличия Skia Sharp, необходимость в Win2D сомнительна.

Win2d тормоз жуткий. Максимум что вы с него сможете выжать это 10`000 линий/прямоугольников/вообще объектов.
Вывод текста (метод drawText) — это вообще пиши пропало.
Единственное но — у него есть возможность рисовать spriteBatch (вывод картинки) — только в этом случае производительность будет реально упираться в GPU (для примера у меня более миллиона 1000х1000 картинок может вывести).


Для примера qt — 200`000 линий рисует при 60 фпс.
При первой же возможности переходите на SkiaSharp (если нужен C#).


P.S. Более того skia с ganesh surface'ом (opengl/directx аппаратное ускорение) умеет использовать NV_path_rendering. Практически в 100 раз быстрее остальных способов (на сайте нвидии демки есть, можете попробовать).

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории