Затухание цвета / оттенок в Direct2D - PullRequest
1 голос
/ 25 февраля 2011

Кто-нибудь разобрался, как изменить цвет растровых изображений при рендеринге с Direct2D?С Direct3D просто указать разные цвета вершин или, при использовании спрайтового пакета, предоставить цвет.Я хотел бы сделать это с помощью Direct2D.Заранее спасибо за любую помощь.

Ответы [ 2 ]

1 голос
/ 11 июля 2012

Я пытался использовать эффект CLSID_D2D1ColorMatrix для тонирования растрового изображения, и он работает, но производительность довольно ужасная (если вам нужно делать это каждый кадр).

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

Мой следующий курс действий - переключить рендерер на D3D и просто внедрить шейдер SpriteBatch, включая тонирование (или использовать его на основе реализации DirectX Tool Kit):

http://blogs.msdn.com/b/shawnhar/archive/2012/06/18/directx-tool-kit-is-now-on-codeplex.aspx

0 голосов
/ 24 декабря 2011

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

Если вы хотите использовать API предварительного просмотра:

Это не так удобно, какSpriteBatch в XNA, но с использованием ID2D1DeviceContext :: SetPrimitiveBlend () для установки нужного типа смешивания (добавка или источник поверх альфа-смешивания), затем вы можете рисовать сверху или снизу изображения для имитации нужного эффекта оттенка.

В качестве альтернативы вы можете использовать DImage ID2D1Effects (новый компонент для D2D), чтобы использовать встроенный эффект или пользовательский эффект для рисования изображения.

Эффекты DImage можно связать вместе из«граф эффектов», подумайте о редакторах шейдеров на основе узлов.

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

...