Создание многослойного рендеринга с использованием DirectX (2D) - PullRequest
0 голосов
/ 22 февраля 2012

Я новичок в DirectX, поэтому мало что знаю об этой технологии.Я хотел бы воспроизвести тот же рендеринг, что делает фотошоп.Я имею в виду возможность рендеринга в реальном времени нескольких слоев (с альфа-картой для каждого слоя).Кто-то сказал мне, что в фотошопе используется DirectX / OpenGl.Для моего проекта я могу использовать DirectX.

Я нашел этот пост Direct3D рендеринг 2D-изображений с «смешанным» режимом наложения и альфа , который точно объясняет, что я хочу сделать, но этот пост довольно старый, и он использовал D3D9.Возможно, теперь есть более простой / быстрый способ создать тот же эффект, используя DirectX 11 и Direct2D.

Я надеюсь, что вы дадите мне несколько советов, прежде чем я что-то начну.

Спасибо.

Редактировать: Я не знаю, достаточно ли я ясен, яне спрашивая никакого кода, просто для указания: если я буду использовать Direct2D или Direct3D 9/10/11.Если мне придется программировать шейдеры ... И что будет лучшим для этого проекта?

Ответы [ 2 ]

1 голос
/ 22 февраля 2012

Если вы используете текущую поставляемую версию Direct2D (а не обновленную версию в превью для Win8), вы можете реализовать смешивание "OVER" (также называемое Normal) с альфа-масками. Визуализируйте содержимое в растровое изображение PBGRA32, а затем визуализируйте маску (если необходимо) в растровое изображение Alpha8. Затем создайте растровую кисть из растрового изображения и используйте ID2D1RenderTarget :: FillOpacityMask (). Если маска не нужна, просто используйте DrawBitmap () и пропустите растровую кисть.

Для реализации любых дополнительных режимов наложения вам понадобится более новый Direct2D, который не будет доступен для всех, пока не выйдет Windows 8 (я думаю, что он доступен и для Win7). Или, конечно, вы можете сделать это в программном режиме, но вам придется реализовать все с нуля.

1 голос
/ 22 февраля 2012

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

Исходя из моего опыта, я бы начал с D2D, особенно с учетом новых API D2D, таких как ID2D1DeviceContext:: DrawImage () и ID2D1Effect поддерживает множество режимов наложения и комбинирования.D2D взаимодействует с D3D довольно хорошо, поэтому в будущем вы можете использовать части D3D, если вам нужно.D2D также предоставляет очень хороший интерфейс для поддержки печати, поэтому тот же код рендеринга можно использовать для печати.

...