Лучшая 2D интеграция с Direct3D 10? - PullRequest
1 голос
/ 08 сентября 2011

У меня есть приложение, которое на данный момент является в основном DirectX 10 3D-графикой. Теперь мы хотим сгенерировать некоторые 2D-изображения в реальном времени для отображения на части экрана. 2D-графика будет создаваться с использованием необработанных данных, поступающих с внешнего устройства - каждое значение будет преобразовано в цвет и положение пикселя.

Я рассмотрел параметры интеграции Direct2D, но не вижу простого способа рисовать поверхность на пиксель за пикселем, а просто обычные линии и формы.

Я полагаю, что было бы также возможно сделать это только с Direct3D (без использования Direct2D), просто иметь простую вершину для каждого пикселя и нарисовать ее в ортогональном виде.

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

Любые указатели будут с благодарностью. Спасибо.

Ответы [ 2 ]

1 голос
/ 02 октября 2011

Ответ на ваш вопрос: текстурированные двумерные квадраты

Просто создайте вершинный шейдер со следующими вершинами:

(0.0f, 0.0f, 0.0f, 0.0f, 1.0f),
(0.0f, 1.0f, 0.0f, 0.0f, 0.0f),
(1.0f, 1.0f, 0.0f, 1.0f, 0.0f),
(1.0f, 0.0f, 0.0f, 1.0f, 1.0f)

Расположение вершин (Положение x, Положение y, Положение z, ТекстураCoord x, Texture Coord y).

И соответствующий индексный буфер.

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

Если вы хотите обновить текстуру, просто отобразите ее (Map), обновите все пиксели, которые хотите, Unmap() и снова связать его с пиксельным шейдером.

1 голос
/ 13 сентября 2011

Обычный подход для рисования 2D-графики (UI и т. Д.) В приложении D3D - это сохранение любых данных растрового изображения, которые вам нужны в текстурах, и рисование текстурированных 2D-квадратов для их отображения.Это дает вам аппаратное ускорение масштабирования, вращения, фильтрации и т. Д. Бесплатно.

Если вы хотите воспроизводить исходные изображения с точностью до пикселя, вам нужно убедиться, что вы учитываете разрешение экрана и рисуете свои квады с правильными положениями вершин.В Direct3D 10 это проще, чем в Direct3D 9 .

...